如何配置JPanel - jPanel1.dispose()或等效的

时间:2014-01-26 15:51:45

标签: java swing user-interface

我们如何处置()JPanel?

我已经完成了jPanel1.removeAll(),现在我想要处置JPanel,以便jPanelParent.getComponents()无法返回它

Component[] components = this.jPanelParent.getComponents();  /// Returns 5 Components      
JPanel last = (JPanel)components[components.length];
last.removeAll();
//last.dispose()   NOT AVAILABLE
  

现在在上面的代码之后如果我运行.getComponents()我不想在上面的代码中获得“last”

3 个答案:

答案 0 :(得分:5)

这是一个寻找错误答案的经典案例;你的问题预先假定一种做事的方式,你问如何做这种预设和错误的操作,并且随之而来的是混乱。 “dispose”是一个用于根本不需要的操作的术语,这与在程序员执行这些操作的环境中使内存可用于回收无关。

相信您想要做的是删除父组件对JPanel的引用。这符合你的愿望,即父面板中的getComponents()不会返回你正在摆脱的面板。

为了使您要删除的面板执行此操作,它需要对父面板的引用,然后您可以将其从父面板中删除,就像从目标面板中删除组件一样。实际上,如果父面板是唯一引用目标的位置,并且目标的组件仅在目标中引用,则只需删除对目标的父面板引用,就不必删除目标组件。 / p>

因此,将您的父面板的引用传递给目标面板,并从父面板执行目标面板的remove(),而不是您的虚拟dispose()调用。

答案 1 :(得分:0)

配置em JPanel Netbeans java

   Component comp = SwingUtilities.getRoot(this);
   ((Window) comp).dispose();

答案 2 :(得分:0)

就我而言,我的一个小组是在JDialog上,以下内容可以工作:

public void dispose() {
    JFrame parent = (JFrame) this.getTopLevelAncestor();
    parent.dispose();
}

但是,我认为在面板中明确保留对父级的引用可能是一种不易出错的方式,如另一个答案中所述。

相关问题