2012-10-22 2 views
0

문제가있는 경우보기 좋게 해결하려고합니다. 나는 말로 설명 할 수 있지만, 코드가 명확하게됩니다ActionEvent 여러 입력 옵션을 사용하는 setsource()

public void actionPerformed(ActionEvent e) {  
     if(e.getSource().equals(ClassA.getButtonOne()) || 
      e.getSource().equals(ClassB.getButtonOne())) {   
      ???????.setEnabled(false);   (class a or class b) 
     } 

설명 : 어떻게 올바른 클래스 타입으로 e.getSource()가, 그래서 그것에 방법을 수행 할 수 있습니다 변경할 수 있습니까? 추가 세부 사항 : 위의 예제에서 'setEnabled'예제에서 if 문에있는 모든 메서드가 원하는 메서드를 가지고 있다고 확신합니다. 여러 개의 if 문을 작성하여 문제를 해결할 수 있지만 중복 코드가 작성됩니다 (특히 향후 C 및 D 클래스가 있기 때문에).

답변

3

동일한 수신기를 사용해야하는 경우 요구 사항은 visitor 또는 double-dispatch 패턴처럼 보입니다. 예를 들어 소스 클래스로 다시 리디렉션해야합니다.

public void actionPerformed(ActionEvent e) {  
     Object source = e.getSource(); 
     if (source instanceof MySource) { 
      ((MySource)source).executeOnEvent(e, this); 
     } 
     .... 

이 많이 구현하지 않아도이 방법은 '경우의 (당신이 확인했듯이, 오류가 발생하기 쉽고 자세한입니다). 이벤트 수신시 오브젝트 유형을 점검하고 적절하다면 콜백합니다. 위의 이벤트와 이벤트를받는 객체를 다시 호출합니다. 그러나 중요한/관련 매개 변수를 선택할 수 있습니다.

1

모든 가능한 소스마다 다른 리스너 인스턴스를 사용하고이 문제를 완전히 피하십시오.

+1

@downvoter 귀하의 downvote는 설명 없이는 의미가 없습니다. – EJP

관련 문제