0

我有一个 JLabel。最初我为它设置了一些文本。

JLabel j = new JLabel();
// set width height and position

j.setText("Hello");

我只希望文本 Hello 显示 5 秒。然后我希望显示文本再见。

我怎么能这样做。

我的作品;但我知道这是错误的,因为它一次只执行 1 个 if-else 块。我想我需要一个计时器或计数器。让这个工作。帮助 ?

long time = System.currentTimeMillis();

if ( time < (time+5000)) { // adding 5 sec to the time
    j.setText("Hello");

} else {
    j.setText("Bye");

}
4

1 回答 1

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();
        }
    }
}

查看

了解更多信息

于 2012-12-03T20:47:17.673 回答