Java 如何处置JPanel-jPanel1.Dispose()或等效文件

Java 如何处置JPanel-jPanel1.Dispose()或等效文件,java,swing,user-interface,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()

我们如何处置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”


这是一个在错误的地方寻找答案的典型案例;你的问题预设了一种做事的方式,而你问如何做这种预设的错误操作,接着就产生了困惑。“dispose”是一个术语,用于描述一个您根本不需要的操作,它与在程序员执行这些操作的环境中使内存可用于回收无关

我相信您要做的是删除父组件对JPanel的引用。这将符合您的愿望,即父面板中的getComponents()不会返回您要丢弃的面板

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


因此,将对父面板的引用传递给目标面板,并从父面板中删除目标面板(),以代替假设的dispose()调用。

dispose em JPanel Netbeans java

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

在我的例子中,我的一个面板位于JDialog上,以下功能可以正常工作:

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

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

我正在创建一个订单,我使用面板向该订单添加详细信息,就像我想在“您的问题预设了一种做事方式”中添加删除函数一样。这听起来像是一个经典的问题。抱歉这样的问题,我是这个论坛的新手,我有XY问题,我会尽量避免这样的问题@rcook:谢谢jPanelParent.remove(last);成功了。没有必要道歉,因为你没有做错什么。事实上,从提问中获得新知识是大多数人都想看到的如果有助于解决问题,请给出答案。:)