Java - 控制JPanels的Z顺序

时间:2010-09-21 18:07:12

标签: java swing graphics awt z-index

简而言之,我需要在我的java应用程序中有一个背景图像,并且在某些事件中,在该图像之上创建一些其他图形。

我以为我会使用JPanel来绘制背景图像,将其添加到我的JFrame程序的开头,然后在某些事件的基础上添加其他JPanel。问题是Swing给JPanels添加了第一个最高的Z索引,所以应该是我的背景显示在所有内容之上。

有没有办法控制JPanels的Z索引/顺序,还是我完全错了?

4 个答案:

答案 0 :(得分:13)

您可以使用setComponentZOrder()在您的应用程序中处理Z-Order。


资源:

答案 1 :(得分:2)

添加多个JPanel并使用z-order听起来很奇怪。我建议您简单地添加一个JPAnel,并覆盖paintComponent(Graphics g)方法,然后根据您的事件绘制正确的图像。

或者使用CardLayout,添加JLabel(带有不同的图像),然后当你的事件触发时,使用

CardLayout cl = (CardLayout)getLayout();
cl.show(this, "card3");

显示正确的JLabel。

答案 2 :(得分:2)

JLayeredPane就是为此而设计的。它允许您控制组件的Z顺序。

答案 3 :(得分:1)

  

我在想我会使用JPanel   绘制背景图像,添加它   在我的JFrame程序的开始,

听起来很合理。

  

然后添加其他JPanels   在某些事件。问题   是Swing首先添加了JPanels   最高的Z指数,那应该是什么   我的背景显示在上面   一切。

将面板添加到面板就像在面板中添加另一个组件一样。子组件将绘制在父面板的顶部。没有必要使用Z-Order。

关键是在面板上使用图像设置布局管理器。然后,必须将添加到图像面板的每个面板设置为非不透明,以便绘制背景图像。

也许Background Panel可以帮助你。它会自动使任何直接添加到面板的组件都不透明。