使用其他JInternalFrame中的按钮将JInternalFrame添加到JDesktopPane

时间:2013-04-03 15:03:46

标签: java swing jinternalframe jdesktoppane swingutilities

我从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内部的按钮创建的,不使用菜单栏。

任何帮助将不胜感激。感谢。

2 个答案:

答案 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)

将侦听器外部化到它自己的类中,如果需要,使用适当的参数。然后,每次创建新帧并将其应用于其按钮时,都可以实例化此侦听器。