如何获得JDesktopPane中所有JInternalFrame的z顺序(图层深度)。似乎没有直接的方式。有什么想法吗?
答案 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
该示例使用了许多匿名内部类来保持代码简短,但实际程序可能不应该这样做。