2017-05-22 3 views
1

저는 학생이고 그래픽을 시작했습니다. 나는 actionListener를 사용하여 두 가지 과제를 수행했다. 두 과제에서 내 생성자는이 코드를 가지고 :actionListener 사용하기

JButton.setActionListener(this) ; 

그래서 여기에 내 질문에 내가 다른 클래스를 사용하는 경우 대신 "이"키워드로, 무슨 일이 일어날 지입니까?

전은

JButton.setActionListener(someClass) ; 
+2

그것은 많은 것들에 달려 있습니다. 먼저 두 클래스 모두'ActionListener'를 구현해야합니다. 다른 클래스를 사용하면 버튼이 정의 된 클래스에 대한 참조를 잃을 수 있습니다 (여전히 ActionEvent # getSource 메소드를 통해 참조를 얻을 수는 있지만 클래스에 액세스 할 수 없음을 의미 함) – MadProgrammer

+0

[버튼, 체크 박스 및 라디오 버튼 사용 방법] (http://docs.oracle.com/javase/tutorial/uiswing)을 참조하십시오. /components/button.html) 및 [Action Listener 작성 방법] (http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html) – MadProgrammer

+2

기본적으로 올바르게 수행하고 있습니다. 'this'는 기존 클래스에 메소드를 추가 할 수 있고 코드 공간을 적게 차지하기 때문에 짧은 예제에서 많이 사용됩니다. 일반적으로 그런 클래스를 재사용하고 싶지는 않지만 걱정을 분리하고 싶으므로 다른 클래스를 액션 리스너로 사용해야합니다. – markspace

답변

0

(심지어 익명 클래스가 허용됩니다). 그래서 당신은 같은 것을 수행 할 수 있습니다

new JButton().addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      //YOUR CODE 
     } 
    }); 

을 또는 당신은 다른 클래스를 구현 (호출 푸 수 있습니다) 및

new JButton().addActionListener(new Foo()); 

로 추가 그리고 경우에 당신은 함수형 프로그래밍처럼 당신은 또한 사용할 수 있습니다 람다 식;)

+0

분명히 Foo.class는 ActionListener를 구현해야합니다. –

0

그것은 즉, 클래스 someClass해야 actionperformed() 방법 등의 구현 방법과 함께 implementsActionListener 그.

처럼 : 당신의 ActionListener의 인스턴스를 추가 할 수 있습니다

public class SomeClass implements ActionListener { 


     public SomeClass() { 

       //Could do things here 
     } 

     public void actionPerformed(ActionEvent e) { 
       //DDo things when button is clicked. 
       System.out.println("The button has been clicked"); 
     } 

} 
+0

'Button'은 AWT 기반 클래스로, 사용하지 않는 것이 가장 좋습니다. – MadProgrammer

+0

정확히 @MadProgrammer, 죄송합니다. –