Java swing-频繁更改框架的颜色

时间:2019-04-07 06:59:59

标签: java swing colors timer background

我面临着更改框架颜色的问题。我创建了计时器timer1,最初将框架的颜色设置为例如co1_(红色)。 现在,当我尝试将实际颜色与预定义值进行比较时,总是会收到以下消息:

  

框架颜色为:javax.swing.plaf.ColorUIResource [r = 238,g = 238,b = 238]

,并且框架颜色仍然保持红色。你知道我在做什么错吗? :)

谢谢。

    Color col1 = Color.RED;
    Color col1_= new Color(255,0,0);
    Color col2 = Color.GREEN;
    Color col2_ = new Color(238,238,238);

    JFrame jfrmForm = new JFrame();
    jfrmForm.setSize(400, 300);
    jfrmForm.setLocation(300,300); 
    jfrmForm.setVisible(rootPaneCheckingEnabled);
    jfrmForm.getContentPane().setBackground(col1_);                      

    //getting color from Frame
    Color c = getContentPane().getBackground();       

    timer.start(); 
    timer.setRepeats(false);

    Timer timer1 = new Timer(1000*frekvCmbBox, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (c.equals(col1_)) {
                jfrmForm.getContentPane().setBackground(col2_);
                System.out.println("Frame color is_: " + c.toString());
            }
            else {
                jfrmForm.getContentPane().setBackground(col1_);
                System.out.println("Frame color is: " + c.toString());
            }                 
        }
    });

    timer1.start();

2 个答案:

答案 0 :(得分:1)

安德鲁,感谢您的帮助-现在可以使用!

Moving Color c = getContentPane().getBackground(); 

执行动作的方法内部是关键。 而且,我很抱歉回答-似乎我没有仔细阅读论坛规则。

答案 1 :(得分:1)

您可以跟踪颜色,而不必检查当前应用于背景的颜色:

import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;
import javax.swing.border.Border;

public class SwingMain {

    private static Color[] colors = {Color.ORANGE, Color.YELLOW, Color.PINK, Color.CYAN};
    private static int counter = 0;
    public static void main(String[] args) {

        JFrame jfrmForm = new JFrame();
        jfrmForm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jfrmForm.setLocationRelativeTo(null);
        jfrmForm.getContentPane().setBackground(colors[counter++]);
        //add some content
        JLabel label = new JLabel("Background color chaging test");
        Border padding = BorderFactory.createEmptyBorder(10, 10, 10, 10);
        label.setBorder(padding);
        jfrmForm.add(label);
        jfrmForm.pack();

        Timer timer = new Timer(1000, ae -> {

            jfrmForm.getContentPane().setBackground(colors[counter++]);
            if (counter >= colors.length) {
                counter = 0;
            }
        });

        timer.start();
        jfrmForm.setVisible(true);
    }
}

enter image description here