3

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

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

4

2 回答 2

2

我偶然发现我们可以使用 JInternalFrame 的一个方法,即 getDesktopPane()。正如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。

于 2013-05-03T23:58:00.357 回答
0

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

于 2013-04-03T20:12:47.953 回答