我面临着更改框架颜色的问题。我创建了计时器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();
答案 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);
}
}