如何使用操作监听器

发布于 2024-12-11 02:38:20 字数 359 浏览 0 评论 0原文

我是 Swing 新手,需要一些关于动作侦听器的帮助。我见过它们像这样使用:

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

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

button.addActionListener(myFunc);

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

这可能吗?

I'm new to Swing and need some help with action listeners. I have seen them used like this example:

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

However I want to do something more like this:

button.addActionListener(myFunc);

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

Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

无声无音无过去 2024-12-18 02:38:20

这里有两种可能的方法 - 您可以直接从您给出的第一个示例中调用 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 年,所以不要屏住呼吸),您将能够使用闭包更简洁地完成此操作。

Two possible approaches here - either you can just call your myFunc method directly from within the first example you give:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        myFunc(e);
    }
});

...Or you can define an inner class that implements actionlistener and then use that:

class MyActionListener implements ActionListener {
    public void actionPerformed(ActionEvent e) { 
        //Your code
    }
}

button.addActionListener(new MyActionListener());

On a futuristic note, when Java 8 hits the shelves (2013, so don't hold your breath) you'll be able to do this more concisely using closures.

舟遥客 2024-12-18 02:38:20

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

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

有关反射操作的更多信息:第 6.2.3 章,第 14 页Steve 的 Java 系列书籍 Java 平台性能策略和战术的第 73 部分威尔逊和杰夫·凯塞尔曼。

教程:

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/

If you want to avoid additional classes you could use a reflective trampoline class. I've written a utility class for this:

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

More to read about reflective actions: Chapter 6.2.3, p. 73 of the Java Series Book Java Platform Performance Strategies and Tactics by Steve Wilson and Jeff Kesselman.

Tutorial:

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>  

Download:

http://sourceforge.net/projects/softsmithy/files/softsmithy/v0.1/

吃兔兔 2024-12-18 02:38:20

很简单:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        myFunc(e);
    }
});


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

...我知道这有点样板...但是 java 不支持将函数作为参数传递。

Quite simply:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        myFunc(e);
    }
});


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

...I know it's a bit boilerplate ...but java doesn't support passing functions as parameters.

惯饮孤独 2024-12-18 02:38:20

仅当该方法返回 ActionListener 时才有可能,否则则不会。当然,将 ActionEvent 的处理委托给单独的方法是完全有效的。

It would only be possible if the method returned an ActionListener, otherwise no. Of course, it's completely valid to delegate the handling of the ActionEvent to a separate method.

随心而道 2024-12-18 02:38:20

如果您想使用 Java 8 lambda 表达式

button.addActionListener(ae -> myFunc(ae));

或者作为其他答案的替代方案,对于较低版本的 Java,您可以使用匿名类。

    ActionListener myFunc = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            //code
        }
    };

    button.addActionListener(myFunc);

If you want to use Java 8 lambda expression

button.addActionListener(ae -> myFunc(ae));

Or as an alternative to other answers, for lower versions of Java you can use an anonymous class.

    ActionListener myFunc = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            //code
        }
    };

    button.addActionListener(myFunc);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文