231 lines
7.2 KiB
Markdown
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 프로그램부터 복잡한 데스크톱 애플리케이션까지 개발 가능!** |