기본적인 스윙 컴포넌트와 활용(2)

ChoRong0824·2022년 9월 30일
0

Java_GUI

목록 보기
8/9

JCheckBox

  • 선택(selected), 비선택(deselected)의 두 상태만 가지는 체크 버튼


생성자

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) //문자열과 이미지를 가진 체크박스
  • selected: true면 선택 상태로 초기화, 디폴트는 해제 상태

체크 박스 생성


문자열 체크 박스


"사과" 텍스트를 가진 체크박스 생성

JcheckBox c = new JCheckBox("사과");

"배" 텍스트를 가지고 선택 상태로 체크박스 생성

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

체크 박스 모양이 명료하게 출력되고 사용자는 이것을 체크


이미지 아이콘을 가진 체크 박스 생성 예

체크 박스 모양이 출력되지 않음

선택 상태를 표현하는 이미지 아이콘을 따로 지정해야 함

  • cherry.jpg 이미지와 "체리" 텍스트를 가진 체크 박스 생성 예
ImageIcon cherryIcon = new ImageIcon("images/cherry.jpg");
ImageIcon selectedCherryIcon = new ImageIcon("images/selectedCherry.jpg");
JCheckBox cherry = new JCheckVox("체리", cherryIcon);
cherry.setSelectedIcon(selectedCherryIcon); //선택 상태의 이미지 달기

예제 11-4 : 체크박스 생성 예

package experience;

import javax.swing.*;
import java.awt.*;

public class CheckBoxEx2 extends JFrame {
    public CheckBoxEx2() {
        setTitle("체크박스 만들기 예제");
        setSize(250, 150);
        setVisible(true);
        Container c = getContentPane();
        c.setLayout(new FlowLayout());
        ImageIcon cherryIcon = new ImageIcon("image/");// 체리 이미지 링크
        ImageIcon selectedCherryIcon = new ImageIcon("images/selectedCherry.jpg"); //선택 상태의 이미지 달기

        JCheckBox apple = new JCheckBox("사과");
        JCheckBox pear = new JCheckBox("배", true);
        JCheckBox cherry = new JCheckBox("체리", cherryIcon);
        cherry.setBorderPaintedFlat(true);
        cherry.setSelectedIcon(selectedCherryIcon);

        c.add(apple);
        c.add(pear);
        c.add(cherry);
    }
    public static void main(String[] args) {
        new CheckBoxEx2();
    }
}


JCheckBox 에서 Item 이벤트 처리

Item 이벤트

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

  • 마우스나 키보드로 체크박스를 선택 상태로 바꾸는 경우
  • 프로그램에서 선택 상태를 바꾸는경우

(이벤트처리)

JCheckBox c = new JCheckBox("사과");
c.setSelected(true); //선택 상태 변경

ItemListener 인터페이스의 추상 메소드

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

ItemEvent의 주요 메소드

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

예제 11-5

package experience;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

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원"));

        MyItemListener listener = new MyItemListener();
        for (int i = 0; i < fruits.length; i++) {
            fruits[i] = new JCheckBox(names[i]);
            fruits[i].setBorderPainted(true);
            c.add(fruits[i]);
            fruits[i].addItemListener(listener);
        }
        sumLabel = new JLabel("현재 0원 입니다,");
        c.add(sumLabel);
        setSize(250, 200);
        setVisible(true);
    }

    public static void main(String[] args) {
        new CheckBoxItemEventEx();
    }

    private class MyItemListener implements ItemListener {
        private int sum=0; //가격의 합 초기화
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                if (e.getItem() == fruits) {
                    sum += 100;
                } else if (e.getItem() == fruits[0]) {
                    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+"원 입니다.");
        }
    }
}
profile
컴퓨터공학과에 재학중이며, 백엔드를 지향하고 있습니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글