2016-06-26 65 views
-1

如何传递附加参数?将对象作为参数传递给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); 
    } 
} 
相关问题