如何获得JDesktopPane中所有JInternalFrame的z顺序(的层深度)。似乎没有直接的方法。有任何想法吗?

最佳答案

尽管我还没有尝试过,但是 Container 类(它是 JDesktopPane 类的祖先)包含 getComponentZOrder 方法。通过传递Component中的 Container ,它将返回的z顺序作为int。该方法返回的Z顺序值最低的Component在最后绘制,换句话说,在顶部绘制。

结合 JDesktopPane.getAllFrames 方法,该方法返回 JInternalFrames 数组,我认为人们可以获得内部框架的z顺序。

编辑

我实际上已经尝试过了,它似乎有效:

final JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final JDesktopPane desktopPane = new JDesktopPane();
desktopPane.add(new JInternalFrame("1") {
    {
        setVisible(true);
        setSize(100, 100);
    }
});
desktopPane.add(new JInternalFrame("2") {
    {
        setVisible(true);
        setSize(100, 100);
    }
});
desktopPane.add(new JInternalFrame("3") {
    JButton b = new JButton("Get z-order");
    {
        setVisible(true);
        setSize(100, 100);
        getContentPane().add(b);
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                JInternalFrame[] iframes = desktopPane.getAllFrames();
                for (JInternalFrame iframe : iframes)
                {
                    System.out.println(iframe + "\t" +
                            desktopPane.getComponentZOrder(iframe));
                }
            }
        });
    }
});

f.setContentPane(desktopPane);
f.setLocation(100, 100);
f.setSize(400, 400);
f.validate();
f.setVisible(true);

在上面的示例中,JDesktopPane填充了三个JInternalFrame,第三个带有按钮,该按钮会将JInternalFrame列表及其z顺序输出到System.out

输出示例如下:
JDesktopPaneTest$3[... tons of info on the frame ...]    0
JDesktopPaneTest$2[... tons of info on the frame ...]    1
JDesktopPaneTest$1[... tons of info on the frame ...]    2

该示例使用许多匿名内部类只是为了使代码简短,但是实际程序可能不应该这样做。

09-11 18:33