다음의 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타입으로 리턴되게 작성 되있으므로, 반드시 캐스틍을 한 후 사용해야된다.
-> 클릭 ->