我们如何处置()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”
答案 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();
}
但是,我认为在面板中明确保留对父级的引用可能是一种不易出错的方式,如另一个答案中所述。