## **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` (포커스 감지). 위 내용을 기반으로 다양한 입력 폼을 만들 수 있다!