Java - 控制 JPanel 的 Z 顺序

发布于 2024-09-24 12:24:15 字数 238 浏览 5 评论 0原文

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

我想我会使用 JPanel 来绘制背景图像,将其添加到程序开头的 JFrame 中,然后在发生某些事件时在其之上添加其他 JPanel。问题是 Swing 给 JPanel 首先添加了最高的 Z 索引,所以我的背景应该显示在所有内容之上。

有什么方法可以控制 JPanel 的 Z 索引/顺序,还是我的做法完全错误?

In short, my need is to have a background Image in my java app, and upon some event, create some other graphics on top of that image.

I was thinking I would use a JPanel to draw the background image in, add it at to my JFrame the start of program, and then add other JPanels on top of that upon certain events. The problem is Swing gives the JPanels added first the highest Z index, so what should be my background is showing up on top of everything.

Is there any way to control the Z index/order of the JPanels, or am I going about this completely wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

少钕鈤記 2024-10-01 12:24:15

您可以使用 setComponentZOrder() 来处理应用程序中的 Z 顺序。


资源:

You can use the setComponentZOrder() to handle Z-Order in your application.


Resources :

池木 2024-10-01 12:24:15

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

The JLayeredPane is designed for just this purpose. It allows you to control the Z-order of components.

温柔少女心 2024-10-01 12:24:15

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

或者使用 CardLayout,并添加 JLabels(使用不同的图像),然后当事件触发时,使用

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

显示正确的 JLabel。

Sounds strange to add mutiple JPanels and use z-order. I would suggest you either simple add ONE JPanel with the paintComponent(Graphics g) method overwritten, where you draw the correct image according to your events.

Or use the CardLayout, and add JLabels (with different images), then when your event triggers, use

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

to show the correct JLabel.

夜吻♂芭芘 2024-10-01 12:24:15

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

听起来很合理。

然后在其上添加其他 JPanel
在某些事件发生时。问题
Swing 给出了首先添加的 JPanels
最高的 Z 索引,所以应该是
我的背景显示在上面
一切。

向面板添加面板就像向面板添加另一个组件一样。子组件将绘制在父面板的顶部。无需考虑 Z 顺序。

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

也许背景面板可以帮助您。它会自动使直接添加到面板的任何组件变得不透明。

I was thinking I would use a JPanel to
draw the background image in, add it
at to my JFrame the start of program,

Sounds reasonable.

and then add other JPanels on top of
that upon certain events. The problem
is Swing gives the JPanels added first
the highest Z index, so what should be
my background is showing up on top of
everything.

Adding a panel to a panel is just like adding another component to the panel. The child component will be painted on top of the parent panel. There is no need to play around with Z-Order.

The key is to set a layout manager on the panel with the image. Then each panel you add to the image panel must be made non-opaque so that the background image will be painted.

Maybe the Background Panel can help you out. It automatically makes any component added directly to the panel non-opaque.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文