P9_4 강의자료에 나오는 ButtonTester 프로그램을 수정하여 화면에 두 개의 버튼이 보이게 하고 각 버튼의 이름을 A, B로 하시오. 버튼을 클릭할 때마다 클릭된 버튼이 어떤 것인가에 따라 "Button A was clicked 1 time(s)!", "Button A was clicked 2 time(s)!", ..., 혹은 "Button B was clicked 1 time(s)!", "Button B was clicked 2 time(s)!", ... 메시지가 프린트되게 하시오. 리스너 클래스를 하나만 정의하고 그 인스턴스도 한 개만 구성하여 두 버튼의 리스너로 등록하시오.
힌트: 리스너 클래스를 아래와 같이 ButtonTester 클래스의 main 메소드 내에 inner class 형태로 작성하면 됩니다.
class ClickListener implements ActionListener{
public void actionPerformed(ActionEvent e){
// ActionEvent 객체에는 이벤트에 관한 정보가 들어 있다.
// ActionEvent가 지원하는 getSource 메소드를 이용하여 이벤트 소스가 어디인지 알아낸다.
// getSource 메소드는 Object 타입을 반환하므로 JButton 타입으로 캐스팅
JButton source = (JButton) e.getSource();
if (source == buttonA)
System.out.println("Button A was clicked " + (countA++) + " time(s)!");
else if (source == buttonB)
System.out.println("Button B was clicked " + (countB++) + " time(s)!");
}
private int countA=1, countB=1;
}
buttonA와 buttonB는 main 메소드 내에 선언되는 지역변수들입니다. 이들을 inner class인 ClickListener 내에서 사용하려면 buttonA와 buttonB가 final로 선언되어야 합니다.