Java 如何得到JDesktopPane中JInternalFrames的z阶
如何获得JDesktopPane中所有jinternalframe的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
容器中的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
该示例使用了大量匿名内部类只是为了保持代码简短,但实际的程序可能不应该这样做