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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何动态改变JFrame的背景颜色?相关的知识,希望对你有一定的参考价值。

我想知道如何改变这段代码,使其能够有一个动态变化的背景颜色,从(红色-> 黑色-> 绿色-> 黑色-> 蓝色-> 黑色->红色)切换,然后循环重新开始。背景颜色应该在每一个tick中不断变化。现在我有一个渲染方法,它将在循环上连续运行,我想知道是否有人能够改变它,使它也包括这种动态颜色变化。

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!

你没有正确使用swing。你应该在paintComponent中进行所有的渲染,当需要时,它会自动调用。然而,JFrame上的paintComponent并不能做任何事情,因为JFrame包含了一个ContentPane(JFrame.getContentPane),这就是你想要改变的背景。改变contentpane的背景应该是简单的。

myJFrame.getContentPane().setBackground(newColor);

然而,并不是所有的(J)组件都会绘制它们的背景(JLabel就是其中之一),所以你可能需要创建一个JPanel,然后使用 myJFrame.setContentPane(...); 前面的代码

注意:要想让swing成为单线程(因为它应该是)使用SwingUtilities.invokeLater(...)来创建修改Swing类。

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

以上是关于如何动态改变JFrame的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 JFrame 的颜色?

PB 怎么动态(用代码)改变数据窗口的属性(例如窗体的字体大小,字体颜色,背景颜色)

VC中动态改变背景颜色

QT动态改变控件背景颜色:用QPalette得到一个颜色m_penColor,如何让一个pushb

为 JFrame 设置背景颜色

用java代码改变xml文件中的button按钮的背景颜色