【问题标题】:How do I change the background color of a JFrame dynamically?如何动态更改 JFrame 的背景颜色?
【发布时间】:2020-04-20 11:12:27
【问题描述】:

我想知道如何更改此代码块,以便能够动态更改背景颜色,从 (red -> black -> green -> black -> blue -> black ->red) 和循环再次开始。背景颜色应在每个刻度上不断变化。现在我有一个渲染方法,它将在循环中不断运行,我想知道是否有人能够改变它,以便它也包括这种动态颜色变化。

private void render() {
        BufferStrategy bs = this.getBufferStrategy();
        if (bs == null) {
            this.createBufferStrategy(3);
            return;
        }

        Graphics g = bs.getDrawGraphics();
        g.setColor(Color.black);
        g.fillRect(0, 0, WIDTH, HEIGHT);


        g.dispose();
        bs.show();
    }

【问题讨论】:

    标签: java swing colors jframe


    【解决方案1】:

    您好,欢迎来到 SO!

    您没有使用向右摆动。您应该在paintComponent 中进行所有渲染,它会在需要时自动调用。然而,JFrame 上的paintComponent 没有做任何事情,因为 JFrame 包含一个 ContentPane (JFrame.getContentPane),而这就是您要更改的背景。更改内容窗格的背景应该很简单

    myJFrame.getContentPane().setBackground(newColor);
    

    但并非所有 (J) 组件都绘制其背景(一个为 JLabel),因此您可能需要创建一个 JPanel 并在上面的代码之前使用 myJFrame.setContentPane(...);

    注意:要让 swing 成为单线程(应该如此),请使用 SwingUtilities.invokeLater(...) 创建/修改 Swing 类。

    注意 2:swing 中的循环应该使用 javax.swing.Timer 完成。你不需要循环:在你的点击监听器中设置新的背景,然后调用 repaint

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 2014-04-05
      • 1970-01-01
      • 2013-07-11
      • 2015-12-17
      • 1970-01-01
      相关资源
      最近更新 更多