TextListener 인터페이스
TextField내에서 내용이 변경되면 특정 행동을 발생시킨다.
- tField에 키보드 입력을 하면 입력값이 숫자인지 아닌지 검사하여 숫자면 tField2에 출력한다.
- 숫자검사로 TextListener인터페이스를 사용한다.
package EventListener;
import java.awt.*;
import java.awt.event.*;
public class TestTextListener extends Frame implements TextListener {
//한개의 메소드만 재정의
//2개의 텍스트 필드선언
TextField tField; //텍스트 입력
TextField tField2; //숫자만 필터링하여 출력
public TestTextListener() {
//텍스트 필드 인스턴스화
tField = new TextField(20);
tField2 = new TextField(20);
tField.addTextListener(this); //키보드 입력을 받을 텍스트 필드만 리스터 등록
add(tField);
add(tField2);
this.setLayout(new FlowLayout());
addWindowListener(new WinCloser());
setTitle("Using a TextListener Object");
setBounds(100,100,400,400);
setVisible(true);
}
public static void main(String[] args) {
TestTextListener ttl = new TestTextListener();
}
//TextListener인터페이스에 의해 요구
//이벤트가 발생한 TextField에 관한 정보를 포함한 TextEvent를 받는다
public void textValueChanged(java.awt.event.TextEvent te) {
//이벤트를 발생시킨 텍스트필드에 대한 핸들을 얻는다.
TextField tf = (TextField)te.getSource();
//텍스트필드의 현재 상태 구현
String s1 = tf.getText();
//마지막으로 입력된 문자를 가진 문자열을 얻기 위해 substring()을 사용한다.
int strlen = s1.length();
String lastCharString = s1.substring(strlen-1);
//입력문자가 정수인지 아닌지 결정하기 위한 에러처리
try {
int i = Integer.parseInt(lastCharString); //문자열이 숫자를 포함하고 있지 않으면 예외
tField2.setText(tField2.getText() + lastCharString); //예외가 던져지면 실행되지 않는다.
}
catch (NumberFormatException nfe) {
System.out.println("not a number");
}
}
}
class WinCloser extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
- 편리하지만 자원의 소비가 높다.
- 일반적으로 GUI프로그램은 필요한 CPU 사이클이 쉽게 사용가능할 정도로 가벼워야 한다.