我从https://stackoverflow.com/a/6868039/2240900获得的代码段
如何使用放在internal1中某处的按钮将internal2添加到desktoppane1。
在添加到按钮的ActionListener中,您可以使用以下代码获取对桌面窗格的引用:
Container container = SwingUtilities.getAncestorOfClass(JDesktopPane.class, (Component)event.getSource());
if (container != null)
{
JDesktopPane desktop = (JDesktopPane)container;
JInternalFrame frame = new JInternalFrame(...);
desktop.add( frame );
}
我的问题是如果按钮位于另一个JInternalFrame中,如何添加另一个JInternalFrame?例如:使用放在internal2 / internal3 / internalX中某处的按钮将internalX添加到desktoppane1,其中每个内部都是使用internalX内部的按钮创建的,不使用菜单栏。
任何帮助将不胜感激。感谢。
答案 0 :(得分:2)
我不小心发现我们可以使用getInktopPane()的JInternalFrame方法。 正如在javadoc中提到的那样:
getDesktopPane
public JDesktopPane getDesktopPane()
Convenience method that searches the ancestor hierarchy for a JDesktop instance. If JInternalFrame finds none, the desktopIcon tree is searched.
Returns:
the JDesktopPane this internal frame belongs to, or null if none is found
所以我们可以使用如下命令:
JDesktopPane desktopPane = internalFrame.getDesktopPane();
desktopPane.add(internalX);
或者如果类扩展JInternalFrame,只需使用
JDesktopPane desktopPane = this.getDesktopPane();
desktoppane.add(internalX);
让JDesktopPane在嵌套的JInternalFrame中添加另一个JInternalFrame。
答案 1 :(得分:0)
将侦听器外部化到它自己的类中,如果需要,使用适当的参数。然后,每次创建新帧并将其应用于其按钮时,都可以实例化此侦听器。