티스토리 뷰
JTextField
텍스트 한 줄을 입력하는 컴포넌트
- BorderLayout에 바로 부착할 경우 기본 생성자로 생성 가능하지만
주로 JPanel 등에 부착해서 사용할 때 생성자 파라미터로 컬럼길이를 전달해야한다(컬럼길이를 설정해주어야 함!)
- getText() 메서드로 입력된 텍스트를 가져오고 setText() 메서드로 새 텍스트를 표시할 수 있다.
- ActionListener 연결 시 텍스트 입력 후 엔터키에 대한 동작이 처리 가능하다.
- KeyListener 연결 시 키보드에서 눌러지는 키에 대한 동작이 처리 가능하다.
public void showFrame() {
JFrame f = new JFrame();
f.setBounds(200, 300, 200, 200);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField tf = new JTextField();
f.add(tf, BorderLayout.CENTER);
f.setVisible(true);
}
자동으로 중앙으로 위치하지만 괜히 BorderLayout.CENTER를 붙여봤다.
버튼을 부착하고 텍스트 입력 후 출력이 되게 해보자!
// JButton 객체 생성 후 JFrame 객체의 South
JButton btn = new JButton("입력");
f.add(btn, BorderLayout.SOUTH);
// JButton 객체 이벤트 처리
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// JTextField에 입력된 텍스트를 가져와 출력
String str = tf.getText();
System.out.println(str);
tf.setText(""); // 널스트링("") 값 설정 => 입력된 텍스트 초기화
}
});
doClick() 설정을 하면 입력이 눌려진다!
tf.addActionListener(new ActionListener() {
@Override
// 엔터키 눌렀을 때 동작을 하게
public void actionPerformed(ActionEvent e) {
btn.doClick(); // 입력이 눌러진다
}
});
JPanel
- 여러 개의 컴포넌트를 하나로 묶는 경량 컨테이너로 기본 레이아웃은 FlowLayout이다
- 주로, 프레임(JFrame)에 패널(JPanel)을 부착하여 컴포넌트를 배치하는 형태로 사용한다.
프레임 CENTER 영역에 JTextField와 JButton 컴포넌트를 하나로 묶어서 부착
=> 복수 개의 컴포넌트를 묶기 위해 JPanel 사용
1. JPanel 객체 생성
public void showFrame() {
JFrame f = new JFrame();
f.setBounds(500, 400, 200, 300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel();
f.setVisible(true);
}
2. JPanel 컨테이너를 JFrame 컨테이너의 CENTER 영역에 부착(나중에 부착해도 된다)
JPanel p = new JPanel();
f.add(p, BorderLayout.CENTER);
3. TextField와 JButton 객체를 생성
주의할 점은 FlowLayout을 갖는 JPanel에 JTextField를 부착하는 경우
반드시 JTextField의 컬럼크기를 설정해야한다!
tf = new JTextField(100); // 크기설정
JButton btn = new JButton("확인");
참고로 Ex2 클래스 단에 JTextField tf의 멤버변수를 지정해준 상태이다.
4. JTextField와 JButton 객체를 JPanel에 부착한다
p.add(tf);
p.add(btn);
'배운 것 기록 > java' 카테고리의 다른 글
JCheckBox, JComboBox, JSpinner (0) | 2022.07.27 |
---|---|
JOptionPane (0) | 2022.07.27 |
레이아웃(layout) (0) | 2022.07.26 |
Event (0) | 2022.07.20 |
Swing (0) | 2022.07.18 |