我是Swing的新手,需要一些动作听众的帮助。我见过他们像这个例子一样使用:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Do something
}
});
但是我想做更像这样的事情:
button.addActionListener(myFunc);
public void myFunc(ActionEvent e)
{
// Do something
}
这可能吗?
答案 0 :(得分:7)
这里有两种可能的方法 - 您可以直接从您给出的第一个示例中调用myFunc方法:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
myFunc(e);
}
});
...或者您可以定义一个实现actionlistener的内部类,然后使用它:
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
//Your code
}
}
button.addActionListener(new MyActionListener());
在一个未来主义的音符上,当Java 8上架时(2013年,所以不要屏住呼吸),你将能够更简洁地使用闭包。
答案 1 :(得分:4)
如果你想避免额外的课程,你可以使用反光蹦床课程。我为此编写了一个实用工具类:
更多关于反思行动的内容:Steve Wilson和Jeff Kesselman撰写的Java Series Book Chapter 6.2.3, p. 73的Java Platform Performance Strategies and Tactics。
教程:
http://softsmithy.sourceforge.net/lib/docs/tutorial/swing/action/index.html
的Maven:
<dependency>
<groupId>org.softsmithy.lib</groupId>
<artifactId>lib-core</artifactId>
<version>0.1</version>
</dependency>
下载:
http://sourceforge.net/projects/softsmithy/files/softsmithy/v0.1/
答案 2 :(得分:3)
很简单:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
myFunc(e);
}
});
public void myFunc(ActionEvent e)
{
// Do something
}
...我知道它有点样板...但java不支持将函数作为参数传递。
答案 3 :(得分:3)
只有方法返回ActionListener
,否则无效。当然,将ActionEvent
的处理委托给单独的方法是完全有效的。
答案 4 :(得分:1)
如果您想使用Java 8
lambda表达式
button.addActionListener(ae -> myFunc(ae));
或者作为其他答案的替代方案,对于较低版本的Java,您可以使用匿名类。
ActionListener myFunc = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//code
}
};
button.addActionListener(myFunc);