프로그래밍 언어/JAVA

JComboBox<E>, 콤보박스 컴포넌트

· 코딩마이데이

JComboBox<E>

JComboBox<E>는 텍스트필드, 버튼, 드롭다운(drop down) 리스트로 구성되는 콤보박스 컴포넌트를 구현합니다. E는 콤보박스에 삽입되는 아이템의 타입으로, 콤보박스를 생성할 때 E 대신 아이템의 타입을 대입하여 구체화해야 합니다.

 

JComboBox 컴포넌트의 생성

콤보박스 컴포넌트는 다음 생성자를 이용하여 생성합니다.

JComboBox<E>() // 빈 콤보박스
JComboBox<E>(Vector listData) // 백터로부터 아이템을 공급받는 콤보박스
JComboBox<E>(Object [] listEData) // 배열로부터 아이템을 공급받는 콤보박스

 

JList<E>와 같이, JComboBox<E>(Vector listData)나 JComboBox<E>(Object [] listData) 생성자를 이용하여 벡터나 배열로부터 아이템을 공급받아 만들어진 콤보박스는, 한 번 생성된 후 listData(백터나 배열)를 수정해도 콤보박스를 변경헐 수 없거나 예측할 수 없는 일이 발생하므로 주의하기를 바랍니다.

 

배열로부터 콤보박스 생성

String [] fruits = {"apple", "banana", "kiwi", "mango", "pear", 
			"peach", "berry", "strawberry", "blackberry"};
JComboBox<String> strCombo = new JComboBox<String>(fruits);

 

콤보박스에 동적으로 아이템 추가하기

콤보박스는 리스트와 달리 동적으로 아이템의 추가/삭제가 가능합니다.

private String [] names = {"kitae", "jaemoon", "hyosoo", "namyun"};
JComboBox<String> nameCombo = new JComboBox<String>(); // 빈 콤보박스 생성
		for(int i=0; i<names.length; i++)
			nameCombo.addItem(names[i]); // names[]의 문자열을 콤보박스에 추가

 

빈 콤보박스 컴포넌트의 아이템 삭제하기

removeItem(Object obj), removeItemAt(int index), removeAllItems() 등을 호출하여 콤보박스의 아이템을 삭제할 수 있습니다. index는 0부터 시작합니다.

nameCombo.removeItemAt(2); // 3번째 아이템 삭제

 

콤보박스 만들기

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

public class ComboBoxEx extends JFrame {
    private String [] fruits = {"apple", "banana", "kiwi", "mango", "pear",
            "peach", "berry", "strawberry", "blackberry"};
    private String [] names = {"kitae", "jaemoon", "hyosoo", "namyun"};

    public ComboBoxEx() {
        setTitle("콤보박스 만들기 예제");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout(new FlowLayout());

        JComboBox<String> comboBox = new JComboBox<>(fruits); // 문자열 콤보박스 생성

        c.add(comboBox);

        JComboBox<String> nameCombo = new JComboBox<String>(); // 빈 콤보박스 생성
        for (int i = 0; i < names.length; i++) {
            nameCombo.addItem(names[i]); // 콤보박스에 문자열 아이템 삽입
        }

        c.add(nameCombo);
        setSize(300, 300);
        setVisible(true);
    }

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

 

[실행 결과]

 

 

JComboBox<E>와 Action 이벤트

콤보박스의 아이템을 선택하면 다음 2개의 이벤트가 동시에 발생합니다.

  • Action 이벤트
  • Item 이벤트

아이템 선택을 일종의 명령으로 처리하고자 하면 Action 이벤트를, 아이템을 선택하거나 해제하는 것이 목적이라는 Item 이벤트를 처리하면 됩니다.

int getSelectedIndex() // 선택 가능한 아이템의 인덱스 번호를 리턴합니다.
Object getSelectedItem() // 선택 상태인 아이템의 객체의 레퍼런스를 리턴합니다.

 

Action 이벤트를 이용한 콤보박스 활용 예

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ComboActionEx extends JFrame {
    private String [] fruits = {"apple", "banana", "kiwi", "mango"}; // 콤보박스의 아이템
    private ImageIcon [] images = { // 이미지 객체 배열
            new ImageIcon("images/apple.jpg"),
            new ImageIcon("images/banana.jpg"),
            new ImageIcon("images/kiwi.jpg"),
            new ImageIcon("images/mango.jpg")};

    private JLabel imgLabel = new JLabel(images[0]); // 이미지 레이블 컴포넌트
    private JComboBox<String> strCombo = new JComboBox<String>(fruits); // 문자열 콤보박스

    public ComboActionEx() {
        setTitle("콤보박스 활용 예제");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout(new FlowLayout());
        c.add(strCombo);
        c.add(imgLabel);

        // Action 리스너 등록
        strCombo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JComboBox<String> cb = (JComboBox<String>) e.getSource(); // Action 이벤트가 발생한 알아내기
                int index = cb.getSelectedIndex(); // 콤보박스의 선택된 아이템의 인덱스 번호 알아내기
                imgLabel.setIcon(images[index]); // 인덱스의 이미지를 이미지 레이블 컴포넌트에 출력
            }
        });

        setSize(300, 250);
        setVisible(true);
    }

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

 

[실행결과]