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

7.4 KiB
Raw Blame History

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 예제 입력값을 버튼 클릭 시 표시

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 예제 비밀번호 입력 확인

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 예제 여러 줄 입력 필드

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 (포커스 감지).

위 내용을 기반으로 다양한 입력 폼을 만들 수 있다!