如何闪烁任何JComponent的背景颜色?

时间:2016-12-28 16:52:19

标签: java swing colors background jcomponent

我试图闪烁JButton的背景颜色,但只是睡觉了#39;它在工作。

我的代码:

@Override
public void actionPerformed(ActionEvent e){

  if(!empty){
  }else{
  myButton.setBackground(Color.RED);
  try {TimeUnit.MILLISECONDS.sleep(200);} catch (InterruptedException e2){}
  myButton.setBackground(Color.LIGHT_GRAY);
  try {TimeUnit.MILLISECONDS.sleep(200);} catch (InterruptedException e1) {}
  myButton.setBackground(Color.RED);
  try {TimeUnit.MILLISECONDS.sleep(200);} catch (InterruptedException e1) {}
  myButton.setBackground(Color.LIGHT_GRAY);
  }
  }
}

编辑: 无法发布整个代码,这么多行。 该按钮位于GridBagLayout中:

myButton= new Jbutton("Button!");
myButton.setBackground(Color.White);
myButton.setHorizontalAlignment(JTextField.CENTER);;
myButton.setForeground(Color.black);
GridBagConstraints gbc_myButton = new GridBagConstraints();
gbc_myButton.fill = GridBagConstraints.BOTH;
gbc_myButton.gridx = 0;
gbc_myButton.gridy = 1;
gbc_myButton.gridwidth=3;
panel.add(myButton, gbc_myButton);

编辑2: 我只是弄清楚它没有在运行时设置任何颜色(有或没有任何延迟/睡眠)。

2 个答案:

答案 0 :(得分:2)

您需要使用blackberry.app来制作这样的动画。

javax.swing.Timer

注意:并非所有组件/ JCompone实际上都通过调用setBackground

来更改后台

答案 1 :(得分:0)

问题是当你睡眠UI线程(通过while True: main() if input("Repeat the program? (Y/N)").strip().upper() != 'Y': break )时,它将无法重新呈现更改。我打赌最后的颜色会被渲染出来。

您需要找到一种触发颜色变化的替代方法,查看定时器,尤其是摆动定时器。