如何使用动作侦听器

时间:2011-10-20 18:21:07

标签: java swing actionlistener

我是Swing的新手,需要一些动作听众的帮助。我见过他们像这个例子一样使用:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // Do something
    }
});

但是我想做更像这样的事情:

button.addActionListener(myFunc);

public void myFunc(ActionEvent e) 
{
   // Do something
}

这可能吗?

5 个答案:

答案 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)

如果你想避免额外的课程,你可以使用反光蹦床课程。我为此编写了一个实用工具类:

http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/swing/action/ReflectiveXAction.html

更多关于反思行动的内容:Steve Wilson和Jeff Kesselman撰写的Java Series Book Chapter 6.2.3, p. 73Java 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);