Использование SwingWorker и Timer для отображения времени на этикетке? - PullRequest
5 голосов
/ 24 марта 2012

Я хочу, чтобы часы показывали текущее время и обновлялись каждую секунду. Код, который я использую:

int timeDelay = 1000;
ActionListener time;
time = new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent evt) {
            timeLabel.setText(DateTimeUtil.getTime()); 
            /*timeLabel is a JLabel to display time,
            getTime() is samll static methos to return formatted String of current time */
        }
    };
SwingWorker timeWorker = new SwingWorker() {

        @Override
        protected Object doInBackground() throws Exception {

            new Timer(timeDelay, time).start();
            return null;
        }
    };
timeWorker.execute();

Что я хочу обновить timeLabel текст в другой теме, кроме EDT.
Я делаю это правильно? Есть ли другой способ лучше?
Также для информации, я добавил timeLabel к extendedJPanel, который содержит несколько похожих типов утилит и вызван в другом MainJFrame .

1 Ответ

12 голосов
/ 25 марта 2012

Вы можете сделать это без SwingWorker, потому что для этого и создан Swing Timer.

int timeDelay = 1000;
ActionListener time;
time = new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent evt) {
        timeLabel.setText(DateTimeUtil.getTime()); 
        /* timeLabel is a JLabel to display time,
           getTime() is samll static methos to return 
           formatted String of current time */
    }
};

new Timer(timeDelay, time).start();
...