как поставить таймер на JLabel для обновления себя каждую секунду - PullRequest
4 голосов
/ 29 мая 2011

Я создал игру и в своем графическом интерфейсе Swing я хочу поставить таймер. В настоящий момент я делаю это с полем с текущим временем, полученным с помощью System.currentTimeMillis(), которое получает значение при запуске игры. В методе моей игры я поставил поле System.currentTimeMillis() -; и он сообщает вам текущее время, прошедшее с начала игры.

Тем не менее, как заставить это обновляться каждую секунду, скажем так, JLabel будет иметь: timePassed: 0s, timePassed: 1s и так далее. Имейте в виду, что я не использую темы в своей игре в любой момент.

РЕДАКТИРОВАТЬ: спасибо всем за ваши добрые предложения. Я использовал комбинацию ваших ответов, пожалуйста, дайте мне обратную связь.

У меня есть джабель как поле под названием время. (иначе я не могу справиться с этим).

time = new JLabel("Time Passed:  " + timePassed() + " sec");
    panel_4.add(time);

    ActionListener actionListener = new ActionListener() {
        public void actionPerformed(ActionEvent actionEvent) {
            time.setText("Time Passed: " + timePassed() + " sec");
        }
    };
    Timer timer = new Timer(1000, actionListener);
    timer.start();

Ответы [ 4 ]

6 голосов
/ 16 января 2015

Вот так я бы настроил мой JLabel на обновление с указанием времени и даты.

Timer SimpleTimer = new Timer(1000, new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
        jLabel1.setText(SimpleDay.format(new Date()));
        jLabel2.setText(SimpleDate.format(new Date()));
        jLabel3.setText(SimpleTime.format(new Date()));
    }
});
SimpleTimer.start();

Затем он добавляется в ваш основной класс, и jlabel1 / 2/3 обновляется с помощью таймера.

5 голосов
/ 29 мая 2011

Посмотрите на класс таймера качания . Это позволяет довольно легко настраивать повторяющиеся задачи.

3 голосов
/ 29 мая 2011
new Thread(new Runnable
{
    public void run()
    {
        long start = System.currentTimeMillis();
        while (true)
        {
            long time = System.currentTimeMillis() - start;
            int seconds = time / 1000;
            SwingUtilities.invokeLater(new Runnable() {
                 public void run()
                 {
                       label.setText("Time Passed: " + seconds);
                 }
            });
            try { Thread.sleep(100); } catch(Exception e) {}
        }
    }
}).start();
0 голосов
/ 21 октября 2014

Запишите это в Конструкторе

ActionListener taskPerformer = новый ActionListener () {

             @Override

            public void actionPerformed(ActionEvent evt) {
               jMenu11.setText(CurrentTime());
            }
        };

        Timer t = new Timer(1000, taskPerformer);
        t.start();

А этот конструктор выписать

public String CurrentTime () {

       Calendar cal = new GregorianCalendar();
       int second = cal.get(Calendar.SECOND);
       int min = cal.get(Calendar.MINUTE);
       int hour = cal.get(Calendar.HOUR);
       String s=(checkTime(hour)+":"+checkTime(min)+":"+checkTime(second));
       jMenu11.setText(s);
       return s;

   }

   public String checkTime(int t){
String time1;
if (t < 10){
    time1 = ("0"+t);
    }
else{
    time1 = (""+t);
    }
return time1;

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...