加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 具有多个图层的JFrame

发布时间:2020-12-15 04:52:22 所属栏目:Java 来源:网络整理
导读:我有一个有两层的窗口:静态背景和包含移动对象的前景.我的想法是只绘制一次背景(因为它不会改变),所以我将更改面板透明并将其添加到静态背景之上.这是以下代码: public static void main(String[] args) { JPanel changingPanel = new JPanel() { @Overrid
我有一个有两层的窗口:静态背景和包含移动对象的前景.我的想法是只绘制一次背景(因为它不会改变),所以我将更改面板透明并将其添加到静态背景之上.这是以下代码:

public static void main(String[] args) {
    JPanel changingPanel = new JPanel() {

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.RED);
            g.fillRect(100,100,100);
        }
    };
    changingPanel.setOpaque(false);

    JPanel staticPanel = new JPanel();
    staticPanel.setBackground(Color.BLUE);
    staticPanel.setLayout(new BorderLayout());
    staticPanel.add(changingPanel);

    JFrame frame = new JFrame();
    frame.add(staticPanel);
    frame.setSize(800,600);
    frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

这段代码为我提供了我想要的正确图像,但每次重新绘制changingPanel时,staticPanel也会重新绘制(这显然违背了仅绘制静态面板一次的整个想法).有人能告诉我什么是错的吗?

仅供参考我使用javax.swing.Timer每秒24次重新计算和重新绘制更改面板.

解决方法

当您将透明组件重新绘制在另一个组件上方时,您仍然会“弄脏”下方组件,导致它被重新绘制.如果您没有重新绘制下层,则会在其上方获得图像的拖尾效果.

此处唯一可用的优化不是重新生成较低级别上使用的图像.每次上面的图层更改时,仍然需要将光栅绘制到图形缓冲区.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读