2016-06-26 4 views
-1

추가 매개 변수를 전달하는 방법은 무엇입니까? 내가하고 싶은 무엇Object를 매개 변수로 ActionListener에 전달

public class A { 

    public static void create(String txt, ActionListener evt){ 
     MenuItem item = new MenuItem(txt); 
     SomeClass sample_class = new SomeClass(); 

     // Would like to do this... 
     // item.addActionListener(evt, sample_class); 

     item.addActionListener(evt); 
    } 

} 

public class B { 

    public static void init(){ 
     A.create("Test", evt -> { 
      System.out.println("hi"); 
     }); 
    } 

} 

는 액션 청취자를 사용할 수 있도록 (듯이) "sample_class"를 전달할 수 있습니다 : 여기

시도하고 내가하고 싶은 것에는 분명히 몇 가지 예제 코드입니다.

그래서 최종 결과는 다음과 같이 될 것이다, 그래서 나는

A.create("Test", (evt, something) -> { 
    something.do_something(); 
}); 

이 유사 꽤 몇 가지 질문을 읽고 ... 청취자 내 클래스를 사용할 수 있습니다,하지만 난 내 앞을 쌀 수 없습니다 그것 주위.

+0

추가 매개 변수를 추가 할 필요없이 ActionListener를 구현하는 클래스를 만들고 원하는 멤버 변수를 설정하면됩니다. – Tibrogargan

+0

아, 그래. 말이된다. 나는 Lambda를 지금 사용할 수 없다고 생각한다, 그렇지? – JacketPotatoeFan

+1

"네가 가진 유일한 도구가 망치 인 것처럼 유혹하는 것 같아. 손톱처럼 모든 것을 다룰 줄 알아."- Abraham Maslow – Tibrogargan

답변

-1

SomeClass에 ActionListener를 구현하고 이벤트를 캡슐화 할 수 있습니다.

public class A { 
    public static void create(String txt, ActionListener evt){ 
     MenuItem item = new MenuItem(txt); 
     SomeClass sample_class = new SomeClass(evt); 

     item.addActionListener(sample_class); 
    }  
} 

public class SomeClass implements ActionListener { 
    ActionListener evt; 

    public SomeClass(ActionListener evt) { 
     this.evt = evt; 
    } 

    @Override 
    public void actionPerformed(ActionEvent ae) { 
     this.evt.actionPerformed(ae); 
    } 
}