Java 如何得到JDesktopPane中JInternalFrames的z阶

Java 如何得到JDesktopPane中JInternalFrames的z阶,java,swing,jinternalframe,Java,Swing,Jinternalframe,如何获得JDesktopPane中所有jinternalframe的z顺序(层深度)。这似乎没有一条直截了当的道路。有什么想法吗?尽管我没有尝试过,但类(类的祖先)包含一个方法。通过传递容器中的a,它将以int的形式返回的z顺序。方法返回的具有最低z顺序值的组件将最后绘制,换句话说,将在顶部绘制 结合返回数组的方法,我认为可以获得内部帧的z阶 编辑 我已经尝试过了,而且似乎很有效: final JFrame f = new JFrame(); f.setDefaultCloseOperation

如何获得JDesktopPane中所有jinternalframe的z顺序(层深度)。这似乎没有一条直截了当的道路。有什么想法吗?

尽管我没有尝试过,但类(类的祖先)包含一个方法。通过传递
容器中的a,它将以
int
的形式返回的z顺序。方法返回的具有最低z顺序值的
组件将最后绘制,换句话说,将在顶部绘制

结合返回数组的方法,我认为可以获得内部帧的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
s填充,第三个带有按钮,该按钮将输出
JInternalFrame
s列表及其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
该示例使用了大量匿名内部类只是为了保持代码简短,但实际的程序可能不应该这样做