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

The*_*ing 4 java user-interface swing listeners factory-method

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

如果我有一个简单的工厂类,如下面列出的那样,我应该在它返回到调用类之前向该按钮添加一个ActionListener.如果答案为"是",那么如何添加监听器?

class GUIFactory
{
    public static JButton getJButton()
    {
        JButton aButton = new JButton();
        return aButton; 
    }
}
Run Code Online (Sandbox Code Playgroud)

假设我想使用getJButton()方法向GUI添加5个按钮,我将如何编写ActionListener以便知道单击了哪个按钮?

或者应该将监听器添加到调用类中?

JFrame gui = new JFrame();
gui.add(AppFactory.getJButton());
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容

gui.add(GUIFactory.getJButton().addActionListener(new guiButtonListener()));
Run Code Online (Sandbox Code Playgroud)

并得到一个错误:

这里不允许使用"void"类型.

Rek*_*kin 5

这是因为addActionListener返回无效.尝试:

JButton button = GUIFactory.getJButton();
button.addActionListener(new guiButtonListener())
gui.add(button);
Run Code Online (Sandbox Code Playgroud)

请注意,Swing GUI编程非常惯用.有些人可能更喜欢使用Beans Binding(或其他绑定解决方案)将视图和模型相互连接.有人会争辩说,使用事件总线可以产生最佳,低耦合,高度可重用的GUI组件.另请参阅Swing应用程序框架(现已弃用,但BSAF处于非常好的状态)和GUTS框架.

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

哦,两个Swing Rich内容平台(NetBeans RCP,Eclipse RCP)都有非常具体的API来处理GUI.例如,NetBeans RCP使用Lookup,NodesWindows API来保护开发人员免受Swing问题的影响.Eclipse团队抛弃了Swing并编写了自己的SWT GUI工具包.如果你想要一些很棒的设计参考,你可能想看看教程.