TextListener 인터페이스

C/Java : 2008. 1. 14. 11:54

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 사이클이 쉽게 사용가능할 정도로 가벼워야 한다.

Posted by 청웨일