4

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

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

class GUIFactory
{
    public static JButton getJButton()
    {
        JButton aButton = new JButton();
        return aButton; 
    }
}

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

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

JFrame gui = new JFrame();
gui.add(AppFactory.getJButton());

我试过以下

gui.add(GUIFactory.getJButton().addActionListener(new guiButtonListener()));

并得到一个错误:

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

4

1 回答 1

5

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

JButton button = GUIFactory.getJButton();
button.addActionListener(new guiButtonListener())
gui.add(button);

请注意,Swing GUI 编程是非常惯用的。有些人可能更喜欢使用Beans Binding(或其他绑定解决方案)来连接视图和模型。有人会争辩说,使用事件总线会产生最好的、低耦合、高度可重用的 GUI 组件。还可以查看Swing 应用程序框架(现已弃用,但BSAF的状况非常好)和GUTS框架。

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

哦,两个大的 Swing 富内容平台(NetBeans RCPEclipse RCP)有非常特定的 API 来处理 GUI。例如,NetBeans RCP 使用LookupNodesWindows API 来保护开发人员免受 Swing 问题的影响。Eclipse 团队放弃了 Swing 并编写了自己的 SWT GUI 工具包。如果您想要一些出色的设计参考,您可能想查看教程。

于 2010-08-22T21:15:52.430 回答