如何动态更改 JFrame 的背景颜色?

How do I change the background color of a JFrame dynamically?

我想知道如何更改此代码块才能动态更改背景颜色(红色 -> 黑色 -> 绿色 -> 黑色 -> 蓝色 -> 黑色 -> 红色)循环再次开始。背景颜色应该在每个滴答声中不断变化。现在我有一个渲染方法,它将在循环中连续 运行,我想知道是否有人能够改变它,以便它也包括这种动态颜色变化。

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();
    }

您好,欢迎来到 SO!

您没有使用正确的挥杆动作。您应该在 paintComponent 中完成所有渲染,它会在需要时自动调用。但是,JFrame 上的 paintComponent 不执行任何操作,因为 JFrame 包含一个 ContentPane (JFrame.getContentPane),这就是您要更改的背景。更改内容窗格的背景应该像

一样简单
myJFrame.getContentPane().setBackground(newColor);

然而,并不是所有的 (J)Components 都会绘制它们的背景(其中一个是 JLabel),因此您可能需要创建一个 JPanel 并在上面的代码之前使用 myJFrame.setContentPane(...);

注意:要使 swing 成为单线程(应该如此),请使用 SwingUtilities.invokeLater(...) to create/modify Swing 类.

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