# **Swing의 `JComboBox`, `JList` 및 관련 클래스 정리** ## **1. 주요 메서드 정리** ### **(1) `JComboBox` 메서드** | 메서드 | 설명 | |--------|------------------------------------------| | `addItem(E item)` | 콤보박스에 항목 추가 | | `removeItem(Object item)` | 특정 항목 제거 | | `removeItemAt(int index)` | 지정한 인덱스의 항목 제거 | | `removeAllItems()` | 모든 항목 제거 | | `setSelectedItem(Object item)` | 특정 항목을 선택 상태로 설정 | | `getSelectedItem()` | 현재 선택된 항목 반환 | | `setSelectedIndex(int index)` | 특정 인덱스를 선택 상태로 설정 | | `getSelectedIndex()` | 현재 선택된 항목의 인덱스 반환 | | `setEditable(boolean b)` | 콤보박스를 편집 가능하도록 설정 | | `isEditable()` | 편집 가능 여부 확인 | | `addActionListener(ActionListener l)` | 항목 선택 시 이벤트 리스너 추가 | | `addItemListener(ItemListener l)` | 아이템이 선택 또는 변경될 때 이벤트 리스너 추가 | --- ### **(2) `JList` 메서드** | 메서드 | 설명 | |--------|------------------------------------------| | `setListData(E[] listData)` | 리스트 데이터를 설정 | | `getSelectedValue()` | 현재 선택된 값 반환 | | `getSelectedValuesList()` | 여러 개의 선택된 값 리스트 반환 | | `setSelectedIndex(int index)` | 특정 인덱스를 선택 | | `setSelectedIndices(int[] indices)` | 여러 개의 항목을 선택 | | `getSelectedIndex()` | 현재 선택된 인덱스 반환 | | `getSelectedIndices()` | 선택된 인덱스 배열 반환 | | `setSelectionMode(int mode)` | 선택 모드 설정 (`SINGLE_SELECTION`, `MULTIPLE_INTERVAL_SELECTION` 등) | | `addListSelectionListener(ListSelectionListener l)` | 항목 선택 변경 시 이벤트 리스너 추가 | --- ### **(3) `DefaultComboBoxModel` (콤보박스 데이터 모델)** | 메서드 | 설명 | |--------|------------------------------------------| | `addElement(E item)` | 모델에 항목 추가 | | `insertElementAt(E item, int index)` | 특정 위치에 항목 삽입 | | `removeElement(E obj)` | 특정 항목 제거 | | `removeElementAt(int index)` | 특정 인덱스의 항목 제거 | | `getElementAt(int index)` | 특정 인덱스의 항목 가져오기 | | `getSize()` | 항목 개수 반환 | --- ### **(4) `DefaultListModel` (리스트 데이터 모델)** | 메서드 | 설명 | |--------|------------------------------------------| | `addElement(E item)` | 리스트에 항목 추가 | | `insertElementAt(E item, int index)` | 특정 위치에 항목 삽입 | | `removeElement(E obj)` | 특정 항목 제거 | | `removeElementAt(int index)` | 특정 인덱스의 항목 제거 | | `getElementAt(int index)` | 특정 인덱스의 항목 가져오기 | | `getSize()` | 항목 개수 반환 | --- ## **2. 관련 이벤트 정리** | 이벤트 리스너 | 관련 컴포넌트 | 설명 | |--------------|-------------|----------------------------------| | `ActionListener` | `JComboBox` | 콤보박스에서 항목이 선택될 때 발생 | | `ItemListener` | `JComboBox`, `JList` | 항목이 선택되거나 해제될 때 발생 | | `ListSelectionListener` | `JList` | 리스트의 선택 항목이 변경될 때 발생 | | `MouseListener` | `JList` | 리스트 항목을 마우스로 클릭할 때 발생 | --- ## **3. 예제 코드 및 설명** ### **(1) `JComboBox` 예제 – 항목 선택 시 라벨에 출력** ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class JComboBoxExample { public static void main(String[] args) { JFrame frame = new JFrame("JComboBox Example"); frame.setSize(300, 150); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new FlowLayout()); JLabel label = new JLabel("선택된 항목: "); JComboBox comboBox = new JComboBox<>(new String[]{"사과", "바나나", "체리"}); comboBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { label.setText("선택된 항목: " + comboBox.getSelectedItem()); } }); frame.add(comboBox); frame.add(label); frame.setVisible(true); } } ``` **설명:** - `JComboBox`에 "사과", "바나나", "체리" 항목을 추가. - 사용자가 선택하면 `ActionListener`가 실행되어 선택된 항목을 `JLabel`에 출력. --- ### **(2) `JList` 예제 – 여러 개 항목 선택 가능** ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; public class JListExample { public static void main(String[] args) { JFrame frame = new JFrame("JList Example"); frame.setSize(300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); DefaultListModel listModel = new DefaultListModel<>(); listModel.addElement("Java"); listModel.addElement("Python"); listModel.addElement("C++"); listModel.addElement("JavaScript"); JList list = new JList<>(listModel); list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); JScrollPane scrollPane = new JScrollPane(list); JButton button = new JButton("선택 확인"); JLabel label = new JLabel("선택된 항목: "); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { List selectedValues = list.getSelectedValuesList(); label.setText("선택된 항목: " + selectedValues); } }); frame.add(scrollPane, BorderLayout.CENTER); frame.add(button, BorderLayout.SOUTH); frame.add(label, BorderLayout.NORTH); frame.setVisible(true); } } ``` **설명:** - `JList`에 "Java", "Python", "C++", "JavaScript" 항목 추가. - 여러 개의 항목을 선택할 수 있도록 `setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)` 설정. - 버튼을 누르면 선택된 항목이 `JLabel`에 출력됨. --- ## **4. 총정리** - **`JComboBox`**: 드롭다운 목록에서 하나의 항목 선택 가능. `ActionListener`와 `ItemListener`를 사용하여 선택 이벤트 처리. - **`JList`**: 여러 개의 항목을 리스트 형태로 표시. 선택 모드 설정 가능 (`SINGLE_SELECTION`, `MULTIPLE_INTERVAL_SELECTION`). - **`DefaultComboBoxModel`, `DefaultListModel`**: 동적으로 항목을 추가/삭제할 수 있는 모델 제공. - **관련 이벤트**: `ActionListener` (콤보박스 선택 이벤트), `ListSelectionListener` (리스트 선택 변경 감지). 위 내용을 바탕으로 다양한 UI 요소를 조합하여 인터랙티브한 프로그램을 만들 수 있다!