Files
java-examples/docs/swing/ComboBox, JList.md

166 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# **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<E>` (콤보박스 데이터 모델)**
| 메서드 | 설명 |
|--------|------------------------------------------|
| `addElement(E item)` | 모델에 항목 추가 |
| `insertElementAt(E item, int index)` | 특정 위치에 항목 삽입 |
| `removeElement(E obj)` | 특정 항목 제거 |
| `removeElementAt(int index)` | 특정 인덱스의 항목 제거 |
| `getElementAt(int index)` | 특정 인덱스의 항목 가져오기 |
| `getSize()` | 항목 개수 반환 |
---
### **(4) `DefaultListModel<E>` (리스트 데이터 모델)**
| 메서드 | 설명 |
|--------|------------------------------------------|
| `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<String> 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<String> listModel = new DefaultListModel<>();
listModel.addElement("Java");
listModel.addElement("Python");
listModel.addElement("C++");
listModel.addElement("JavaScript");
JList<String> 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<String> 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 요소를 조합하여 인터랙티브한 프로그램을 만들 수 있다!