Java 使用静态工厂类生成GUI组件-如何以及在何处添加所需的侦听器?

Java 使用静态工厂类生成GUI组件-如何以及在何处添加所需的侦听器?,java,user-interface,swing,listeners,factory-method,Java,User Interface,Swing,Listeners,Factory Method,我想使用工厂类和方法来生成GUI组件,但我不知道如何以及在哪个类中声明各种侦听器并将其添加到组件中 如果我有一个简单的工厂类,如下面列出的,我应该在按钮返回到调用类之前向按钮添加ActionListener。如果答案是“是”,那么如何添加侦听器 class GUIFactory { public static JButton getJButton() { JButton aButton = new JButton(); return aButton

我想使用工厂类和方法来生成GUI组件,但我不知道如何以及在哪个类中声明各种侦听器并将其添加到组件中

如果我有一个简单的工厂类,如下面列出的,我应该在按钮返回到调用类之前向按钮添加ActionListener。如果答案是“是”,那么如何添加侦听器

class GUIFactory
{
    public static JButton getJButton()
    {
        JButton aButton = new JButton();
        return aButton; 
    }
}
假设我想使用getJButton()方法将5个按钮添加到GUI中,那么如何对ActionListener进行编码,以便它知道单击了哪个按钮

还是应该在调用类中添加侦听器

JFrame gui = new JFrame();
gui.add(AppFactory.getJButton());
我试过以下方法

gui.add(GUIFactory.getJButton().addActionListener(new guiButtonListener()));
并得到一个错误:

此处不允许使用“void”类型


这是因为
addActionListener
返回void。尝试:

JButton button = GUIFactory.getJButton();
button.addActionListener(new guiButtonListener())
gui.add(button);
请注意,SwingGUI编程非常地道。有些人可能更喜欢使用(或其他绑定解决方案)将视图和模型彼此连接起来。有人会争辩说,使用一个简单的GUI组件可以产生最好的、低耦合的、高度可重用的GUI组件。还可以查看(现在已弃用,但for的状态非常好)和框架

您将看到有许多尝试来解决GUI编程和设计问题。主题非常广泛,解决方案也有很大差异


哦,两大Swing富内容平台(,)都有非常特定的API来处理GUI。例如,NetBeans RCP使用、和API来保护开发人员不受Swing问题的影响。Eclipse团队抛弃了Swing,编写了自己的SWTGUI工具包。如果您想要一些很棒的设计参考,您可能需要看看教程。

EclipseRCP不是基于Swing的!你好,雷金。谢谢你的回答-当我看到你的代码示例时,我可能会踢自己:-)我没有使用工厂的经验,所以我只是根据我在这里读到的其他代码示例来尝试我的手,所以谢谢。你使用工厂的意图是什么?但是,如果您想使用工厂,您应该考虑从方法中返回更常见的类,如“代码> AbstractButton <代码>,如果您真的正在更改组件,则更灵活。如果您想创建组件,使用方法链接,您可能需要考虑构建器模式。Hello Johannes。我的目的是为我的应用程序创建一个模块化的基于JFrame的GUI。在过去,我的GUI都是在一个类中构建的,我想摆脱这种情况,转而采用一种更可重用的方式来做事情。老实说,我没有任何实现模式、工厂等的经验——事实上,我第一次知道它们是在这里,所以当我浏览java相关问题时。我发布的代码示例是我基于其他人在此处发布的示例的第一次尝试。感谢建设者模式的建议。