티스토리 뷰

안녕하세요 Shiny Ocean입니다.

 

 

자바를 주제로한 여섯번째 포스팅은 자바의 GUI인터페이스 프로그래밍입니다.

간단한 프레임의 구현이나 컴포넌트등은 책을 참고하여 공부하였고 이번 포스팅에서는

JSilder에 대해서 다루어 보겠습니다. 슬라이더의 이벤트를 이용하여 글자의 포인트를 조절하는

예제를 해결하며 자세히 다루어 보겠습니다.

 

 

 

Java 예제문제 7 - Jslider을 이용하여 클자의 폰트사이즈 조절

<P.637 실습문제 7번>

수평 슬라이더를 만들고, 슬라이더를 움직이면 문자열 레이블의 글자 크기를 조절할

수 있는 스윙응용 프로그램을 작성해라. 폰트는 1부터 100픽셀까지이며, 큰 눈금은 20간격,

작은눈금은 5간격으로 하라, 슬라이더는 컨텐트팬의 north영역에, 문자열은 center에 부착하라.

 

<조건1> 슬라이더 조건

1.      수평슬라이더

2.      큰눈금간격 20, 작은눈금간격 5

3.      컨텐트팬의 north영역에 부착

 

<조건2> 레이블 조건

1.      폰트는 1부터 100픽셀

2.      Center에 부착

3.      슬라이더를 움직일때 문자열 레이블의 폰트크기가 조절될수 있게

 

<요약> 움직임에 따라 레이블의 폰트의 크기를 바꿀수있는 FontSizeChange Slider를 작성하라

 

 

 

 

 

해결 과정)

<조건1> 슬라이더 조건

 

P625 -슬라이더

JSlider 슬라이드 바를 출력하여, 마우스로 값을 선택하도록 하는 슬라이더 컴포넌트이다.

 

슬라이더의 종류는 수평슬라이더(HORIZONTAL) 수직슬라이더(VERTICAL) 두가지가 있다

 

슬라이더 객체를 선언해 줄때는 생성자값으로

슬라이더의 종류, 눈금의 최소값, 최댓값, 처음 핸들의 위치값 초기화 해주어야 한다.

 

Javacode ex)

       JSlider slider = new JSlider(종류,눈금의 최소값,최댓값, 처음 핸들의 위치값);

 

 

문제는 수평슬라이더이며 폰트의 크기를 1부터 100까지 조절가능해야 한다함으로

 

       JSlider slider = new JSlider(JSlider.HORIZONTAL,1,100,50);

 

위와같이 코딩하여 JSlider slider라는 이름의 객체로 선언해주었습니다.

 

 

 

다음은 큰눈금 간격과 작은눈금 간격을 조정하겠습니다.

문제에서는 작은눈금의 간격은 5 큰눈금의 간격은 20으로 하라고 했습니다.

P-627 슬라이더의 모양제어 에서 JSlider 다양한 메소드를 설명하고있습니다.

그중 작은 눈금을 조절하는 메소드와 눈금을 조절하는 메소드,

슬라이드의 레이블을 보이게 하는 메소드, 눈금을 보이게 하는 메소드

메소드 4가지에 대한 책의내용은 아래와 같습니다.

 

void setMajorTickSpacing(int space)

슬라이더의 큰눈금 간격을 space 설정

 

                 void setMinorTickSpacing(int space)

                 슬라이더의 작은눈금 간격을 space 설정

 

                 void setPaintLabels(Boolean b)

                 b true 슬라이더의 레이블을 보이게 하고 아니면 감춘다 (ex 1 21 41 61 81)

 

                 void setPaintTicks(Boolean b)

                   b true 슬라이더의 눈금을 보이게 하고 아니면 감춘다  (ex |   |   |   |   |  )

 

 

책의 내용을 바탕으로 작은눈금 간격은 5 큰눈금 간격은 20으로 하고 눈금과 레이블을 보이게 코딩한다면

 

JSlider slider = new JSlider(JSlider.HORIZONTAL,1,100,50);

Slider.setMajorTickSpacing(20);

Slider.setMinorTickSpacing(5);

Slider.setPaintLabels(true);

Slider.setPaintTicks(true);

 

위와 같이 작성했습니다.

 

 

작성한 슬라이더를 컨텐트팬의 north영역에 부착하기 위해 볼더레이아웃을 선언하고 north영역에 부착하였습니다.

 

 

c.setLayout(new BorderLayout());           

c.add(slider, BorderLayout.NORTH); 

 

그러면 아래와 같은 슬라이더를 화면에 출력할수 있었습니다.

<조건2> 레이블 조건

문제에서 레이블에 들어가는 폰트는1부터 100픽셀이고 센터에 부착하며, 슬라이더를 통한 폰트크기조절이 가능해야 합니다.

 

먼저 문제의 그림과 같이 “I LOVE JAVA”라는 스트링을 레이블의 생성자에 넣어 객체를 선언해 주었습니다.

       private JLabel label = new JLabel("   I Love Java   ");

 

 

다음은 폰트에대한 초기화로 P-588 폰트를 다루는 코드를 참고로 작성해 주었습니다. 여기서 폰트의 크기 값만 슬라이더의 크기를 가져와 입력해 주었습니다. 그러면 처음에 슬라이더의 핸들값으로 입력해준 50 폰트의 크기로 맨처음 초기화 될것입니다.

 

       label.setFont(new Font("Arial", Font.ITALIC, slider.getValue()));

 

다음은 슬라이더가 움직일때마다 핸들값에 따라서 폰드의 사이즈가 변화하게 하기 위해

ChangeListener 작성해 주었습니다.

 

체인지 리스너는 void stateChanged(ChangeEvent e) 메소드를 구현해 주어야 합니다.

문제에서는 폰트의 사이즈가 핸들의 값이 바뀔 마다 바뀌는 것임으로

JSlider s = (JSlider)e.getSource();

label.setFont(new Font("Arial", Font.ITALIC, s.getValue()));  

JSlide s e.getSource()메소드를 통해 변화하는 핸들값을 받아들이고 값을 폰트의 크기값으로 초기화 해주게 선언했습니다.

 

마지막으로 다완성된 레이블을 볼더레이아웃의 센터에 부착해주고 레이아웃의 크기와 Visible 값을 적절히 코딩후 마무리 하였습니다.

 

레이아웃 code in java)

 

       c.add(label, BorderLayout.CENTER);

 

               setSize(700,300);

               setVisible(true);

 

 

 

 

 

전체 코드)

import java.awt.*;

import javax.swing.*;

import javax.swing.event.*;

 

public class FontSizeChangeSlider extends JFrame {

       private JSlider slider = new JSlider(JSlider.HORIZONTAL,1,100,50);

       //수평 슬라이더 1부터 100까지 범위, 현재값은 50

       private JLabel label = new JLabel("   I Love Java   ");

       //센터에 넣어줄 라벨, 폰트 크기가 제이슬라이더에 따라 유동적으로 변해야함

       public FontSizeChangeSlider() {

               setTitle("JSlider EX");    //타이틀 설정

               setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // 엑스누르면 종료

               Container c = getContentPane();             // 컨테이너 생성

               c.setLayout(new BorderLayout());            //볼더레이아웃으로      

               c.add(slider, BorderLayout.NORTH);           //슬라이더를 노스

               c.add(label, BorderLayout.CENTER);          //라벨을 센터

 

               // 슬라이더 기본설정

               slider.setMajorTickSpacing(20);   //큰눈금 간격

               slider.setMinorTickSpacing(5);    //작은눔금 간격

                slider.setPaintLabels(true);    //트루면 레이블을 보이게

               slider.setPaintTicks(true);     //트루면 눈금을 보이게

 

               label.setFont(new Font("Arial", Font.ITALIC, slider.getValue()));

               //p588 폰트 크기, 종류 설정

               slider.addChangeListener(new ChangeListener() {   //p630 체인지리스너 

                      @Override

                      public void stateChanged(ChangeEvent e) {

                              JSlider s = (JSlider)e.getSource(); //슬라이더 가져옴

                              label.setFont(new Font("Arial", Font.ITALIC, s.getValue()));     //가져온값으로 크기를수정

                      }

 

               });

 

               setSize(700,300);

               setVisible(true);

 

       }

       public static void main(String[] args) {

               new FontSizeChangeSlider();

       }

}

 

 

결과 콘솔)

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함