如何通过创建新实例并销毁旧实例来重置帧

时间:2014-12-09 16:21:40

标签: java swing

我正在制作一个在关闭时继续作为托盘图标运行的应用程序,然后我有这个方法。

public void ResetFrame(){
this.dispose()
new CreateTabs().setVisible(true);
}

它非常简单,关闭框架然后实例换一个新框架,我需要实例化一个新的而不是设置可见因为 stuff 。然后我在同一个类中多次调用此方法,问题是当我尝试从另一个类调用它时。

if(!createTabs.isVisible()){
            createTabs.ResetFrame();
            //createTabs.setVisible(true);
    }

每次单击一个按钮时我都会调用该方法,我希望它关闭前一帧,销毁该对象的实例,这样我就可以调用一个具有新属性的新实例。

问题是:每次我点击按钮,它都会打开一个新框架而不关闭旧框架。

我尝试过dispose(),finalize()和类似的简单方法,没有任何正面结果。

先感谢您的帮助。

编辑:

对不起我的抱怨!错误发生在另一个类,即我称之为的类。

显然问题是我在课堂上实例:

private final CreateTabs createTabs = new CreateTabs();

我不需要新的CreateTabs(),我需要的是引用现有的。

2 个答案:

答案 0 :(得分:1)

关闭Window的方法是使用Window.dispose()。但请注意,您可能不需要这样做。如果您在Window中重新配置组件,则可以使用pack()让窗口完全重新布局。

在您所做的编辑中,如果您将private final CreateTabs ...实例更改为public final ...,则可以通过任何上下文中的classname.variable名称访问此窗口

答案 1 :(得分:1)

首先,您应该查看this link的命名约定(小写函数)。

我不是100%当然你要问的是什么,但是我看到了注释掉的部分,并且知道它会给你一个错误(如果那就是你在问什么)。当你打电话

public void ResetFrame() 
你说

this.dispose();

这意味着你要告诉那个实例摆脱它自己。然后,您创建一个新实例并将其设置为可见。你说的地方

if(!createTabs.isVisible()){
    createTabs.ResetFrame();
    //createTabs.setVisible(true);
}

你告诉createTabs的实例摆脱它自己,所以你现在不能告诉它再次可见。您在ResetFrame函数中创建的新CreateTabs实例未被引用。如果你想让createTabs成为一个“新鲜的”CrateTabs,你可以说......

public CreateTabs ResetFrame(){
    this.dispose()
    CreateTabs newTabs = new CreateTabs();
    newTabs.setVisible(true);
    return newTabs;
}
...
if(!createTabs.isVisible()){
    createTabs = createTabs.ResetFrame();
    createTabs.setVisible(true);
}

如果那不是你要求的,请告诉我。