我有一个JLabel。最初我已经为它设置了一些文字。
JLabel j = new JLabel();
// set width height and position
j.setText("Hello");
我只希望文本Hello显示5秒钟。然后我希望显示文本Bye。
我怎么能这样做。
我的工作;但我知道这是错的,因为它一次只执行1个if-else块。我想我需要一个计时器或一个计数器。让这个工作。帮忙?
long time = System.currentTimeMillis();
if ( time < (time+5000)) { // adding 5 sec to the time
j.setText("Hello");
} else {
j.setText("Bye");
}
答案 0 :(得分:5)
Swing是一个事件驱动的环境,您需要承担的最重要的概念之一就是您绝不能以任何方式阻止事件调度线程(包括但不限于循环,I / O)或Thread#sleep
)
话虽如此,有办法实现你的目标。最简单的是通过javax.swing.Timer
类。
public class TestBlinkingText {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new BlinkPane());
frame.setSize(200, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
protected static class BlinkPane extends JLabel {
private JLabel label;
private boolean state;
public BlinkPane() {
label = new JLabel("Hello");
setLayout(new GridBagLayout());
add(label);
Timer timer = new Timer(5000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
label.setText("Good-Bye");
repaint();
}
});
timer.setRepeats(false);
timer.setCoalesce(true);
timer.start();
}
}
}
结帐
了解更多信息