Files
java-examples/docs/swing/입력 컴포넌트.md

192 lines
7.4 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.
## **1. 주요 입력 컴포넌트 메서드 정리**
### **(1) `JTextField` 메서드**
| 메서드 | 설명 |
|--------|------------------------------------------|
| `setText(String text)` | 텍스트 필드에 문자열을 설정 |
| `getText()` | 현재 입력된 텍스트를 반환 |
| `setEditable(boolean b)` | 편집 가능 여부 설정 (`false`이면 읽기 전용) |
| `setColumns(int columns)` | 텍스트 필드의 너비(문자 개수 단위) 설정 |
| `addActionListener(ActionListener l)` | Enter 키 입력 시 이벤트 리스너 추가 |
| `setHorizontalAlignment(int alignment)` | 텍스트 정렬 방식 설정 (`LEFT`, `CENTER`, `RIGHT`) |
---
### **(2) `JPasswordField` 메서드**
| 메서드 | 설명 |
|--------|------------------------------------------|
| `setText(String text)` | 비밀번호 필드에 문자열 설정 |
| `getPassword()` | 현재 입력된 비밀번호를 `char[]` 배열로 반환 (보안상 `getText()` 대신 사용) |
| `setEchoChar(char c)` | 입력된 문자 대신 표시할 마스킹 문자 설정 (`*` 등) |
| `setEditable(boolean b)` | 편집 가능 여부 설정 |
| `addActionListener(ActionListener l)` | Enter 키 입력 시 이벤트 리스너 추가 |
---
### **(3) `JTextArea` 메서드**
| 메서드 | 설명 |
|--------|------------------------------------------|
| `setText(String text)` | 텍스트 영역에 문자열 설정 |
| `getText()` | 현재 입력된 텍스트를 반환 |
| `append(String text)` | 현재 텍스트 뒤에 새로운 문자열 추가 |
| `setEditable(boolean b)` | 편집 가능 여부 설정 |
| `setRows(int rows)` | 텍스트 영역의 행 개수 설정 |
| `setColumns(int columns)` | 텍스트 영역의 열 개수 설정 |
| `setLineWrap(boolean b)` | 자동 줄바꿈 여부 설정 (`true`이면 줄이 길어지면 자동 개행) |
| `setWrapStyleWord(boolean b)` | 단어 단위로 줄바꿈할지 설정 (`true`이면 단어 기준으로 개행) |
---
## **2. 관련 이벤트 정리**
| 이벤트 리스너 | 관련 컴포넌트 | 설명 |
|--------------|-------------|----------------------------------|
| `ActionListener` | `JTextField`, `JPasswordField` | 사용자가 Enter 키를 눌렀을 때 발생 |
| `KeyListener` | `JTextField`, `JPasswordField`, `JTextArea` | 키보드 입력(키 누름, 해제, 입력) 감지 |
| `FocusListener` | `JTextField`, `JPasswordField`, `JTextArea` | 입력 필드에 포커스가 들어오거나 빠질 때 감지 |
| `DocumentListener` | `JTextField`, `JPasswordField`, `JTextArea` | 텍스트 변경 감지 (입력, 삭제, 변경) |
---
## **3. Swing 입력 컴포넌트 예제 코드와 설명**
### **(1) `JTextField` 예제 입력값을 버튼 클릭 시 표시**
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TextFieldExample {
public static void main(String[] args) {
JFrame frame = new JFrame("JTextField Example");
frame.setSize(300, 150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
JLabel label = new JLabel("이름:");
JTextField textField = new JTextField(15);
JButton button = new JButton("확인");
JLabel resultLabel = new JLabel("");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String name = textField.getText();
resultLabel.setText("입력된 이름: " + name);
}
});
frame.add(label);
frame.add(textField);
frame.add(button);
frame.add(resultLabel);
frame.setVisible(true);
}
}
```
**설명:**
- `JTextField`에 이름을 입력하고,
- 버튼 클릭 시 `JLabel`에 입력된 값이 표시됨.
- `ActionListener`를 사용하여 버튼 클릭 이벤트를 처리.
---
### **(2) `JPasswordField` 예제 비밀번호 입력 확인**
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
public class PasswordFieldExample {
public static void main(String[] args) {
JFrame frame = new JFrame("JPasswordField Example");
frame.setSize(300, 150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
JLabel label = new JLabel("비밀번호:");
JPasswordField passwordField = new JPasswordField(15);
JButton button = new JButton("로그인");
JLabel resultLabel = new JLabel("");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
char[] password = passwordField.getPassword();
if (Arrays.equals(password, "1234".toCharArray())) {
resultLabel.setText("로그인 성공!");
} else {
resultLabel.setText("로그인 실패!");
}
Arrays.fill(password, ' '); // 보안상 배열 비우기
}
});
frame.add(label);
frame.add(passwordField);
frame.add(button);
frame.add(resultLabel);
frame.setVisible(true);
}
}
```
**설명:**
- `JPasswordField`에 비밀번호를 입력하고,
- 버튼 클릭 시 비밀번호가 `"1234"`와 일치하면 "로그인 성공!", 아니면 "로그인 실패!" 출력.
- `getPassword()`를 사용하여 보안 강화 (`getText()` 대신 사용).
---
### **(3) `JTextArea` 예제 여러 줄 입력 필드**
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TextAreaExample {
public static void main(String[] args) {
JFrame frame = new JFrame("JTextArea Example");
frame.setSize(400, 250);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
JTextArea textArea = new JTextArea(10, 30);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
JButton button = new JButton("입력 내용 확인");
JLabel resultLabel = new JLabel("출력: ");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
resultLabel.setText("출력: " + textArea.getText());
}
});
frame.add(new JScrollPane(textArea), BorderLayout.CENTER);
frame.add(button, BorderLayout.SOUTH);
frame.add(resultLabel, BorderLayout.NORTH);
frame.setVisible(true);
}
}
```
**설명:**
- `JTextArea`는 여러 줄 입력이 가능.
- `setLineWrap(true)``setWrapStyleWord(true)`를 설정하면 단어 단위로 자동 줄바꿈.
- `JScrollPane`을 사용하면 스크롤 기능 추가 가능.
- 버튼 클릭 시 입력된 내용을 `JLabel`에 표시.
---
### **총정리**
- **`JTextField`**: 한 줄 입력 필드, Enter 키 감지 가능.
- **`JPasswordField`**: 보안 입력 필드, `getPassword()`를 사용해야 함.
- **`JTextArea`**: 여러 줄 입력 가능, 자동 줄바꿈 기능 제공.
- **관련 이벤트**: `ActionListener` (Enter 키 감지), `KeyListener` (키 입력 감지), `FocusListener` (포커스 감지).
위 내용을 기반으로 다양한 입력 폼을 만들 수 있다!