【问题标题】:Java - control Z order of JPanelsJava - 控制 JPanels 的 Z 顺序
【发布时间】:2011-04-15 08:33:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: java swing graphics awt z-index


    【解决方案1】:

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


    资源:

    【讨论】:

      【解决方案2】:

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

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

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

      显示正确的 JLabel。

      【讨论】:

        【解决方案3】:

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

        听起来很合理。

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

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

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2010-11-05
            • 1970-01-01
            • 2011-05-12
            • 2011-08-26
            • 2010-12-04
            • 1970-01-01
            • 1970-01-01
            • 2017-02-03
            • 2011-06-15
            相关资源
            最近更新 更多