166 lines
6.9 KiB
Markdown
166 lines
6.9 KiB
Markdown
# **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 요소를 조합하여 인터랙티브한 프로그램을 만들 수 있다! |