简而言之,我需要在我的java应用程序中有一个背景图像,并且在某些事件中,在该图像之上创建一些其他图形。
我以为我会使用JPanel来绘制背景图像,将其添加到我的JFrame程序的开头,然后在某些事件的基础上添加其他JPanel。问题是Swing给JPanels添加了第一个最高的Z索引,所以应该是我的背景显示在所有内容之上。
有没有办法控制JPanels的Z索引/顺序,还是我完全错了?
答案 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可以帮助你。它会自动使任何直接添加到面板的组件都不透明。