如何在JDesktopPane中获取JInternalFrame的z顺序

时间:2009-03-09 03:04:08

标签: java swing jinternalframe

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

1 个答案:

答案 0 :(得分:4)

虽然我没有尝试过这个,但Container类(JDesktopPane类的祖先)包含getComponentZOrder方法。通过传递Container中的Component,它将返回int的z顺序。方法返回的具有最低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顺序列表输出到{ {1}}。

示例输出如下:

System.out

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