我试图用这种眨眼方法同时使几个JRadioButtons
闪烁:
private void blink(JRadioButton button, boolean blinking)
{
if(blinking)
{
while(true)
{
try
{
button.setSelected(true);
Thread.sleep(500);
button.setSelected(false);
Thread.sleep(500);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
else
{
button.setSelected(false);
}
}
我知道它与线程有关但我对它们并不熟悉。
答案 0 :(得分:3)
我试图用这种闪烁方法同时使几个JRadioButton闪烁
恕我直言,你不需要多个while循环。
只需将要闪烁的所有按钮添加到ArrayList
,然后在同一个while
循环中,循环显示该列表并闪烁按钮。所以,而不是
button.setSelected(true);
Thread.sleep(500);
button.setSelected(false);
Thread.sleep(500);
您可以使用
for(int i=0; i<yourList.size(); i++) {
yourList.get(i).setSelected(true);
}
Thread.sleep(500);
for(int i=0; i<yourList.size(); i++) {
yourList.get(i).setSelected(false);
}
Thread.sleep(500);
但这是一种不好的做法。使用Timer类并安排线程执行每500
ms:
Timer t = new Timer(500, new ActionListener() {
boolean selected = false;
@Override
public void actionPerformed(ActionEvent e) {
selected = !selected;
for(int i=0; i<yourList.size(); i++) {
yourList.get(i).setSelected(selected);
}
}
});
t.start();
答案 1 :(得分:3)
您无法使用Thread.sleep
为GUI设置动画。事实上,你必须永远不要在事件调度线程上调用Thread.sleep
,因为那个线程负责重新绘制GUI,它在睡眠时显然无法做到。
你必须使用的是Swing Timer类,并安排它以所需的间隔重复。