Files
java-examples/docs/Swing.md

231 lines
7.2 KiB
Markdown

# **Java Swing 쉽게 배우기**
## **1. Swing이란?**
**Java Swing**은 **GUI(그래픽 사용자 인터페이스)를 만드는 라이브러리**다.
버튼, 창, 메뉴, 입력 필드 등을 쉽게 만들 수 있다.
**Swing의 특징**
**AWT보다 강력한 GUI 제공** (AWT는 운영체제에 의존, Swing은 독립적)
**더 많은 UI 컴포넌트 제공** (버튼, 리스트, 테이블, 트리 등)
**이식성이 높음** (운영체제에 상관없이 동일한 UI 제공)
**이벤트 기반 프로그래밍 가능**
---
## **2. 주요 Swing 클래스 및 메서드 정리**
### **(1) `JFrame` 클래스 (메인 창)**
| 메서드 | 설명 |
|--------|------------------------------|
| `setSize(int width, int height)` | 창의 크기를 설정 |
| `setVisible(boolean b)` | 창을 화면에 표시 (`true`) 또는 숨김 (`false`) |
| `setDefaultCloseOperation(int operation)` | 창 닫기 동작 설정 (예: `EXIT_ON_CLOSE`) |
| `add(Component comp)` | 창에 컴포넌트 추가 |
---
### **(2) `JPanel` 클래스 (패널 - 여러 컴포넌트를 담는 컨테이너)**
| 메서드 | 설명 |
|--------|------------------------------|
| `add(Component comp)` | 패널에 컴포넌트 추가 |
| `setLayout(LayoutManager mgr)` | 패널의 배치 관리자 설정 |
---
### **(3) `JButton` 클래스 (버튼)**
| 메서드 | 설명 |
|--------|------------------------------|
| `setText(String text)` | 버튼의 텍스트 설정 |
| `addActionListener(ActionListener l)` | 버튼 클릭 이벤트 설정 |
---
### **(4) `JLabel` 클래스 (텍스트 라벨)**
| 메서드 | 설명 |
|--------|------------------------------|
| `setText(String text)` | 라벨의 텍스트 변경 |
| `setIcon(Icon icon)` | 라벨에 이미지 아이콘 설정 |
---
### **(5) `JTextField` 클래스 (한 줄 입력 필드)**
| 메서드 | 설명 |
|--------|------------------------------|
| `setText(String text)` | 입력 필드에 텍스트 설정 |
| `getText()` | 입력된 텍스트 가져오기 |
| `addActionListener(ActionListener l)` | 엔터 키 입력 이벤트 설정 |
---
### **(6) `JTextArea` 클래스 (여러 줄 입력 필드)**
| 메서드 | 설명 |
|--------|------------------------------|
| `setText(String text)` | 입력 필드에 텍스트 설정 |
| `getText()` | 입력된 텍스트 가져오기 |
| `setLineWrap(boolean wrap)` | 자동 줄바꿈 설정 |
---
### **(7) `JCheckBox` 클래스 (체크박스)**
| 메서드 | 설명 |
|--------|------------------------------|
| `setSelected(boolean b)` | 체크 상태 설정 |
| `isSelected()` | 체크 여부 확인 |
---
### **(8) `JRadioButton` 클래스 (라디오 버튼)**
| 메서드 | 설명 |
|--------|------------------------------|
| `setSelected(boolean b)` | 선택 상태 설정 |
| `isSelected()` | 선택 여부 확인 |
---
### **(9) `JComboBox` 클래스 (드롭다운 목록)**
| 메서드 | 설명 |
|--------|------------------------------|
| `addItem(Object item)` | 목록에 항목 추가 |
| `getSelectedItem()` | 선택된 항목 가져오기 |
---
### **(10) `JList` 클래스 (리스트 박스)**
| 메서드 | 설명 |
|--------|------------------------------|
| `setListData(Object[] data)` | 리스트 아이템 설정 |
| `getSelectedValue()` | 선택된 값 가져오기 |
---
### **(11) `JTable` 클래스 (테이블)**
| 메서드 | 설명 |
|--------|------------------------------|
| `setModel(TableModel model)` | 테이블 데이터 설정 |
| `getValueAt(int row, int column)` | 특정 위치의 값 가져오기 |
---
### **(12) `JMenuBar`, `JMenu`, `JMenuItem` 클래스 (메뉴)**
| 메서드 | 설명 |
|--------|------------------------------|
| `JMenuBar.add(JMenu menu)` | 메뉴바에 메뉴 추가 |
| `JMenu.add(JMenuItem item)` | 메뉴에 항목 추가 |
---
## **3. 간단한 Swing 예제**
### **✔ 기본 창 만들기 (`JFrame`)**
```java
import javax.swing.*;
public class SwingExample {
public static void main(String[] args) {
// 프레임 생성
JFrame frame = new JFrame("Swing 기본 창");
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 창을 보이게 설정
frame.setVisible(true);
}
}
```
`JFrame`을 사용하여 **기본적인 창을 생성**하는 코드다.
`setSize()`로 크기 설정, `setVisible(true)`로 창을 표시한다.
---
### **✔ 버튼 추가 및 이벤트 처리 (`JButton`)**
```java
import javax.swing.*;
import java.awt.event.*;
public class ButtonExample {
public static void main(String[] args) {
JFrame frame = new JFrame("버튼 예제");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button = new JButton("클릭하세요!");
button.addActionListener(e -> JOptionPane.showMessageDialog(null, "버튼이 눌렸습니다!"));
frame.add(button);
frame.setVisible(true);
}
}
```
`JButton`을 추가하고, **버튼 클릭 이벤트를 처리**하는 코드다.
`JOptionPane.showMessageDialog()`를 사용해 **팝업 메시지 출력**이 가능하다.
---
### **✔ 텍스트 입력 필드 (`JTextField`)**
```java
import javax.swing.*;
public class TextFieldExample {
public static void main(String[] args) {
JFrame frame = new JFrame("텍스트 입력 예제");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField textField = new JTextField(20);
JButton button = new JButton("확인");
button.addActionListener(e -> JOptionPane.showMessageDialog(null, "입력한 값: " + textField.getText()));
JPanel panel = new JPanel();
panel.add(textField);
panel.add(button);
frame.add(panel);
frame.setVisible(true);
}
}
```
`JTextField`를 사용하여 **사용자로부터 입력을 받는 GUI**다.
✅ 버튼 클릭 시 **입력된 값이 팝업으로 출력**된다.
---
### **✔ 체크박스 (`JCheckBox`)**
```java
import javax.swing.*;
public class CheckBoxExample {
public static void main(String[] args) {
JFrame frame = new JFrame("체크박스 예제");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JCheckBox checkBox = new JCheckBox("동의합니다.");
JButton button = new JButton("확인");
button.addActionListener(e -> {
if (checkBox.isSelected()) {
JOptionPane.showMessageDialog(null, "체크됨!");
} else {
JOptionPane.showMessageDialog(null, "체크 안됨!");
}
});
JPanel panel = new JPanel();
panel.add(checkBox);
panel.add(button);
frame.add(panel);
frame.setVisible(true);
}
}
```
✅ **체크박스를 추가하고 상태를 확인**하는 코드다.
---
## **4. 정리**
**Swing은 Java에서 GUI를 만들기 위한 라이브러리!**
**버튼, 입력 필드, 체크박스, 리스트, 테이블 등 다양한 UI 제공**
**이벤트 리스너를 통해 사용자 입력 처리 가능**
✅ **Swing을 활용하면 간단한 GUI 프로그램부터 복잡한 데스크톱 애플리케이션까지 개발 가능!**