使用较少的对象创建从另一个jframe调用Jframe

时间:2011-04-21 17:52:14

标签: java swing jframe

我有一个Jframe,其中包含一个按钮,点击后会打开下一个jframe(让它成为A)

Jframe构造函数包含如下代码:

setVisible(true);
setSize(343,34);

我在Jbutton actionListener中添加了以下代码:

new A();

现在,我有十个jframes也有一个具有相同功能的按钮 我认为这种方法并不恰当,因为每次点击,都会产生一个新的A对象 对于这个问题还有其他解决方案吗?

1 个答案:

答案 0 :(得分:2)

可能的简单解决方案如下:

在你的Jbutton actionListener中:

new ActionListener {
    private JFrame jFrame = null;
    public void actionPerformed(ActionEvent e) {
        if (jFrame == null) {
            jFrame = new A();
        }
        jframe.setVisable(true);
    }
}

然后我将从A()构造函数中删除代码,使构造中的该框架可见。这只是个人编码偏好。我不喜欢框架在施工时出现的时间。

当然这是一个非常简单的解决方案。您可以快速进入更复杂的解决方案。您可以让调解员专门听取特定的JButton,然后制定一个显示新Frame等的策略......这实际上取决于您希望代码的耦合程度。

修改

更复杂的示例,不使用匿名内部类......

public void AMediator implements ActionListener {
    JFrame jFrame = null;
    public void actionPerformed(ActionEvent actionEvent) {
        if (jFrame == null) {
            jFrame = new A();
        }
        jFrame.setVisable(true);
        jFrame.bringToTheFront():  // Not sure this method exists, but it might be worth it to bring this frame forward even if it is already visible.
    }
}

然后,您需要在每个要打开A JFrame实例的按钮上注册上述介体。

注册此调解员的方法有很多种:
- 使用将所有组件连接在一起的主类 - 使用Spring的依赖注入 - 使用可由许多不同服务访问的集中服务 - 其他?

这样,您将只有一个中介(而不是许多匿名的ActionListener内部类)。