繁体   English   中英

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

[英]Calling a Jframe from another jframe using less Object creation

我有一个包含一个按钮的Jframe,单击后会打开下一个jframe(将其设为A)

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

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

我在Jbutton actionListener中放入以下代码:

new A();

现在,我有十个jframe,它们也具有具有相同功能的按钮。
我认为这种方法不合适,因为每次单击时都会创建一个新的A对象。
还有其他解决方案吗?

可能的简化解决方案如下。

在您的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内部类)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM