본문 바로가기

프로그램언어/자바

스윙 컴포넌트의 공통 메소드2

JLabel, 레이블 컴포넌트

JLabel은 문자열이나 이미지를 스크린에 출력하는 레이블 컴포넌트를 만드는 클래스이다.

 

레이블 컴포넌트 생성

레이블 컴포넌트는 레이블이라고도 부르며, 다음 생성자를 이용하여 생성한다.

JLable()  빈생성자
JLable(Icon image) 이미지 레이블
JLable(String text) 문자열 레이블
JLable(String text, Icon image, int hAlign)  문자열과 이미지를 모두 가진 레이블

hAlign : 수평 정렬(SwingConstants.LEFT, SwingConstants.RIGHT, SwingConstants.CENTER )

 

문자열 레이블 생성예

JLabel textLabel = new JLabel("사랑합니다.");

이미지 레이블 생성예

ImageIcon image = new ImageIcon("images/img1.jpg");    // jpg, gif, png파일만 사용가능
JLabel imageLabel = new JLabel(image);

문자열, 이미지, 수평 정렬 값을 가진 레이블 생서예

ImageIcon image = new ImageIcon("images/img1.jpg");
JLabel Label = new JLabel("사랑합니다.", image, SwingConstants.CENTER);

 

JLabel을 이용한 레이블 만들기

import javax.swing.*;

import java.awt.*;

 

public class LabelEx extends JFrame {

    public LabelEx() {

        setTitle("레이블 예제");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container c = getContentPane();

        c.setLayout(new FlowLayout());

 

        // 문자열 레이블 생성

        JLabel textLabel = new JLabel("사랑합니다.");

 

        // 이미지 레이블 생성

        ImageIcon beauty = new ImageIcon("images/beauty.jpg"); // 이미지 로딩

        JLabel imageLabel = new JLabel(beauty); // 이미지 레이블 생성

 

        // 문자열과 이미지를 모두 가진 레이블 생성

        ImageIcon normalIcon = new ImageIcon("images/normalIcon.gif"); // 이미지 로딩

        JLabel label = new JLabel("보고싶으면 전화하세요",

        normalIcon, SwingConstants.CENTER); // 레이블 생성

 

        // 컨텐트팬에 3개의 레이블 부착

        c.add(textLabel);

        c.add(imageLabel);

        c.add(label);

 

        setSize(400,600);

        setVisible(true);

    }

 

    public static void main(String [] args) {

        new LabelEx();

    }

}

실행 결과]

 

 

JButton, 버튼 컴포넌트

 

버튼 컴포넌트 생성

버튼은 다음 생성자를 이용하여 생성한다.

JButton()  빈 버튼
JButton(Icon image) 이미지 버튼
JButton(String text) 문자열 버튼
JButton(String text, Icon image)  문자열과 이미지를 가진 버튼

 

문자열을 가진 버튼예

JButton btn = new JButton("버튼생성1");

 

이미지 버튼만들기

버튼은 3가지 형태로 만들수 있다. (normalIcon, rolloverIcon, pressedIcon)

ImageIcon normalIcon = new ImageIcon("images/normalIcon.gif");

ImageIcon rolloverIcon = new ImageIcon("images/rolloverIcon.gif");

ImageIcon pressedIcon = new ImageIcon("images/pressedIcon.gif");

 

JButton btn = new JButton("테스트버튼", normalIcon); // normalIcon 이미지

btn.setPressedIcon(pressedIcon); // pressedIcon 이미지

btn.setRolloverIcon(rolloverIcon); // rolloverIcon 이미지

 

setIcon() 메소드는 디폴트 이미지를 변경할때 사용하는 함수이다.

button.setIcon(new ImageIcon(images/newIcon.gif));

 

JButton을 이용한 버튼 만들기

import javax.swing.*;

import java.awt.*;

 

public class ButtonEx extends JFrame {

    public ButtonEx() {

        setTitle("이미지 버튼 예제");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container c = getContentPane();

        c.setLayout(new FlowLayout());

 

        // 3개의 이미지를 파일로부터 읽어들인다.

        ImageIcon normalIcon = new ImageIcon("images/normalIcon.jpg");

        ImageIcon rolloverIcon = new ImageIcon("images/rolloverIcon.jpg");

        ImageIcon pressedIcon = new ImageIcon("images/pressedIcon.jpg");

 

       // 3개의 이미지를 가진 버튼 생성

       JButton btn = new JButton("call~~", normalIcon); // normalIcon용 이미지 등록

       btn.setPressedIcon(pressedIcon); // pressedIcon용 이미지 등록

       btn.setRolloverIcon(rolloverIcon); // rolloverIcon용 이미지 등록

       c.add(btn);

 

       setSize(250,150);

       setVisible(true);

    }

 

    public static void main(String [] args) {

        new ButtonEx();

    }

}

실행 결과]

 

 

JCheckBox, 체크박스 컴포넌트

 

체크박스 컴포넌트 생성

JCheckBox() 빈 체크박스
JCheckBox(String text) 문자열 체크박스
JCheckBox(String text, boolean selected) 문자열 체크박스
JCheckBox(Icon image) 이미지 체크박스
JCheckBox(Icon image, boolean selected) 이미지 체크박스
JCheckBox(String text, Icon image) 문자열과 이미지를 가진 체크박스
JCheckBox(String text, Icon image, boolean selected) 문자열과 이미지를 가진 체크박스

 

문자열 체크박스예

JCheckBox apple = new JCheckBox("사과");

문자열을 가지고 처음부터 선택 상태인 체크박스예

JCheckBox prar = new JCheckBox("배", true);

이미지 체크박스

ImageIcon cherryIcon = new ImageIcon("images/cherry.jpg");         // 해제 상태 이미지

ImageIcon selectedCherryIcon = new ImageIcon("images/selectedCherry.jpg");      // 선택 상태 이미지

JCheckBox cherry = new JCheckBox("체리", cherryIcon);    // 해제 상태 이미지만 가진 체크

cherry.setSelectedIcon(selectedCherryIcon);         // 선택 상태 이미지 등록

 

문자열 체크박스 2개와 이미지 체크박스 1개를 가진 프로그램을 작성하시오.

import javax.swing.*;

import java.awt.*;

 

public class CheckBoxEx extends JFrame {

    public CheckBoxEx() {

        setTitle("체크박스 이미지 예제");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container c = getContentPane();

        c.setLayout(new FlowLayout());

 

        // 이미지 체크박스에 사용할 2개의 이미지 객체 생성

        ImageIcon cherryIcon = new ImageIcon("images/cherry1.jpg"); // 해제 상태 이미지

        ImageIcon selectedCherryIcon = new ImageIcon("images/selectedCherry1.jpg"); // 선택 상태 이미지

 

        // 3개의 체크박스 생성

        JCheckBox apple = new JCheckBox("사과");

        JCheckBox pear = new JCheckBox("", true);

        JCheckBox cherry = new JCheckBox("체리", cherryIcon);

 

        cherry.setBorderPainted(true); // 체크박스 외곽선이 보이도록 설정

        cherry.setSelectedIcon(selectedCherryIcon); // 선택 상태 이미지 등록

 

        // 컨텐트팬에 3개의 체크박스 부착

        c.add(apple);

        c.add(pear);

        c.add(cherry);

 

        setSize(250,150);

        setVisible(true);

    }

 

    public static void main(String [] args) {

        new CheckBoxEx();

    }

}

실행 결과]

 

 

JCheckBox에서 Item 이벤트 처리

Item 이벤트는 체크박스나 라디오버튼의 선택 상태가 바뀔 때 발생하는 이벤트이다.

 

ItemListener 인터페이스

Item 이벤트 리스너는 ItemListener 인터페이스를 상속받아 만들며, 다음 하나의 메소드로 구성된다.

void itemStateChanged(ItemEvent e);   //체크박스의 선택/해제 상태가 변하는 경우 호출

 

ItemEvent 객체

Item 이벤트가 발생하면 ItemEvent 객체가 생성되어 itemStateChanged()의 인자로 전달된다.  개발자는 ItemEvent 객체의 다음 메소드를 호출하여 체크 상태의 변화와 이벤트 소스 컴포넌트를 알아낼 수 있다.

int getStateChange() 리턴 값은 선택된 경우 ItemEvent.SELECTED, 해제된 경우 ItemEvent.DESELECTED
Object getItem() 이벤트를 발생시킨 아이템 객체 리턴, 체크박스의 경우 JCheckBox 컴포넌트의 레퍼런스 리턴

 

체크박스 컴포넌트에 ItemListener 리스너 달기

JCheckBox의 addItemListener() 메소드를 이용하여 다음과 같이 등록한다.

checkbox.addItemListener(new myItemListener());

 

 

ItemEvent를 활용하여 체크박스로 가격 합산하기 프로그램

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

 

public class CheckBoxItemEventEx extends JFrame {

    private JCheckBox [] fruits = new JCheckBox [3]; // 체크박스 배열

    private String [] names = {"사과", "배", "체리"}; // 체크박스 문자열로 사용할 문자열 배열

    private JLabel sumLabel; // 계산 합을 출력할 레이블

 

    public CheckBoxItemEventEx() {

        setTitle("체크박스와 ItemEvent 예제");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container c = getContentPane();

        c.setLayout(new FlowLayout());

 

        c.add(new JLabel("사과 100원, 배 500원, 체리 20000원"));

 

        // 3개의 체크박스를 생성. 컨텐트팬에 삽입하고 Item 리스너 등록

        MyItemListener listener = new MyItemListener();

        for(int i=0; i<fruits.length; i++) {

            fruits[i] = new JCheckBox(names[i]); // names[]의 문자열로 체크박스 생성

            fruits[i].setBorderPainted(true); // 체크박스 외곽선 보이도록 설정

            c.add(fruits[i]); // 컨텐트팬에 체크박스 삽입

            fruits[i].addItemListener(listener); // 체크박스에 Item 리스너 등록

        }

 

        sumLabel = new JLabel("현재 0 원 입니다."); // 가격 합을 출력하는 레이블 생성

        c.add(sumLabel);

 

        setSize(250,200);

        setVisible(true);

    }

 

    // Item 리스너 구현

    class MyItemListener implements ItemListener {

        private int sum = 0; // 가격의 합

 

        // 체크박스의 선택 상태가 변하면 itemStateChanged()가 호출됨

        public void itemStateChanged(ItemEvent e) {

            if(e.getStateChange() == ItemEvent.SELECTED) { // 선택 경우

                if(e.getItem() == fruits[0]) // 사과 체크박스

                    sum += 100;

                else if(e.getItem() == fruits[1]) // 배 체크박스

                    sum += 500;

                else // 체리 체크박스

                    sum += 20000;

            }

            else { // 해제 경우

                if(e.getItem() == fruits[0]) // 사과 체크박스

                    sum -= 100;

                else if(e.getItem() == fruits[1]) // 배 체크박스

                    sum -= 500;

                else // 체리 체크박스

                    sum -= 20000;

            }

            sumLabel.setText("현재 "+ sum + "원 입니다."); // 합 출력

        }

    }

    public static void main(String [] args) {

        new CheckBoxItemEventEx();

    }

}

실행 결과]