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

问题描述 投票:1回答:1

我想知道如何改变这段代码,使其能够有一个动态变化的背景颜色,从(红色-> 黑色-> 绿色-> 黑色-> 蓝色-> 黑色->红色)切换,然后循环重新开始。背景颜色应该在每一个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();
    }
java colors jframe
1个回答
0
投票

你好,欢迎来到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(...)

© www.soinside.com 2019 - 2024. All rights reserved.