프로그래밍[Univ]/Swing Basic

[Swing] 이벤트 리스너의 구현

Cloud Travel 2011. 8. 27. 14:51

다음의 Test소스를 이용하여 리스너 구현에 대해서 설명하겠다.

기존과 다른 부분을 강조 하였고, 그 부분을 위주로 설명을 해나갈 것이다.
------------------------------------------------------------------------------------------------------
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class ListenerTest extends JFrame{
 ListenerTest(){
  setTitle("listener Test");
  setSize(400,300);
  setLayout(new FlowLayout());
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  //FlowLayout 배치관리자를 가지는 프레임 생성
  
  JButton btn = new JButton("TEST");
  ActionListenerTest listner = new ActionListenerTest();
  btn.addActionListener(listner);
  //TEST버튼 컴포넌트를 생성후 ActionListener를 단다.
  
  add(btn);
  setVisible(true);
 }
 public static void main(String[] args){
  new ListenerTest();
 }
}

//ActionListner를 상속받아  ActionListnerTest 리스너를 제작
class ActionListenerTest implements ActionListener{
 public void actionPerformed(ActionEvent e){
  JButton btn = (JButton)e.getSource();
  //getSource() 메소드는 이벤트 소스를 제공한다
  //Object 타입으로 리턴하므로 케스팅을 한후 사용해야된다
  
  //getText를 이용하여 b가 가지고 있는 텍스트 정보를 읽어낸다.
  if(btn.getText().equals("TEST")){
   btn.setText("시험");
   //setText를 이용하여 b가 가지고 있는 텍스트 정보를 바꾼다.
  }else{
   btn.setText("TEST");
  }
 }
}

1. 
  import java.awt.event.*;
   - 앞서 설명 했듯이 이벤트 처리를 다루기 위해서는 반드시 포함되어야 하는 import 문이다.

2. 
  ActionListenerTest listner = new ActionListenerTest();
  btn.addActionListener(listner);
   - 이벤트 리스너는 각 컴포넌트에 등록되어야만 한다!!
   - 위 부분은 리스너 인스턴스를 생성하여 버튼 객체인 btn에 등록하는 것이다.
   - 일반적으로 컴포넌트에 이벤트 리스너를 등록하기 위해서는
      componentName.add[]Listener(Listener); 를 사용한다.
       > componentName : 컴포넌트 이름 / [] : 이벤트 이름
   - 리스너 등록시 주의 해야 할점 
      > 각 컴포넌트가 가질수 있는 리스너만이 등록가능하다.(이젠 페이지 표 참조)

3. 
 
//ActionListner를 상속받아  ActionListnerTest 리스너를 제작
class ActionListenerTest implements ActionListener{
 public void actionPerformed(ActionEvent e){
  JButton btn = (JButton)e.getSource();
  //getSource() 메소드는 이벤트 소스를 제공한다
  //Object 타입으로 리턴하므로 케스팅을 한후 사용해야된다
  
  //getText를 이용하여 b가 가지고 있는 텍스트 정보를 읽어낸다.
  if(btn.getText().equals("TEST")){
   btn.setText("시험");
   //setText를 이용하여 b가 가지고 있는 텍스트 정보를 바꾼다.
  }else{
   btn.setText("TEST");
  }
 }
}
 이벤트 리스너의 구현 부분이다.

 이벤트 리스너 구현시 리스너가가 기지고 있는 모든 추상 메소드를 언급및 작성해줘야한다.

 이부분에서 주의해서 볼 부분은 getSource() 메소드 일 것이다. 
 자신을 등록하고 있는 컴포넌트의 이벤트 소스를 제공해주는 메소드로 모든 컴포넌트에 적용가능하도록
 Object타입으로 리턴되게 작성 되있으므로, 반드시 캐스틍을 한 후 사용해야된다.
 


                                                                      -> 클릭 ->