powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Самообновление таймера в JLabel???
2 сообщений из 2, страница 1 из 1
Самообновление таймера в JLabel???
    #37773046
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста как можно сделать так, чтоб таймер обновлял сам себя? Я вот написал небольшой класик, в котором таймер вставляется в JLabel и обновляется каждую секунду. Мне же нужно создавать такие таймеры из разных компонентов.
В принципе так как я сделал не оч красиво, так как придется писать много кода и в таймер передавать ссылку на объект на котором метка.

Мне же нужно, чтоб я сделал например new ChessTimer и он сам бы себя обновлял.

Спасибо!

Вот класс

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
package chess.util;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;

import javax.swing.Timer;

import chess.local.ChessGUILocal_View;
import chess.network.ChessGUINetwork;

public class ChessTimer {

	private int miliseconds = 3590000;
	private NumberFormat format;
	
	private boolean isActive;

	private Timer chessTimer;

	private ChessGUILocal_View chessGUILocal;
	private ChessGUINetwork chessGUINetwork;

	public ChessTimer(ChessGUILocal_View chessGUILocal) {
		this.chessGUILocal = chessGUILocal;
	}

	public ChessTimer(ChessGUINetwork chessGUINetwork) {
		this.chessGUINetwork = chessGUINetwork;
	}
	public ChessTimer() {
		// TODO Auto-generated constructor stub
	}

	public void timerStart() {
		this.isActive = true;
		ActionListener taskPerformer = new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (chessGUILocal != null) {
					chessGUILocal.getChessTotalTimerLabel().setText(
							((miliseconds / 3600000) + ":" + ((miliseconds % 3600000) / 60000) + ":" + ((miliseconds % 60000) / 1000)));
					miliseconds += 1000;
				} else {
					// TODO ChessGUINetwork parametr
				}
			}
		};
		chessTimer = new Timer(1000, taskPerformer);
		chessTimer.start();
	}

	public void timerStop() {
		this.isActive = false;
		chessTimer.stop();
	}

	public boolean isActive() {
		return isActive;
	}

}
...
Рейтинг: 0 / 0
Самообновление таймера в JLabel???
    #37777141
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_,

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

Метод, устанавливающий время, должен быть синхронизирован, т.к. разные игроки могут ставить часы одновременно. Если время <0, переустанавливаем выходную метку, чтобы показать время.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
...
import java.awt.*;
...
public class StopWatch extends Label implements Runnable {
...
   private Thread thread;
   private int time = 0;
   /**
   /*
   public StopWatch() {
      super();
      thread = new Thread(this);
      thread.setPriority(3);
   }
   /**
   /*
   public StopWatch(int i) 
      this();
      set(i);
   }
   /**
   /*
 public synchronized void set(int i) {
   time = 1;
   if(time > 0) {
      int min = time/60;
      int sec = time%60;
      if(sec > 9) {
         setText(""+min+":"+sec);
      } else {
         setText(""+min+":0"+sec);
      }
   } else {
      setText("0:00");
   }
}
/**
*/
public void start() {
   if(thred != null) {
     if(!thred.isAlive()) {
        thread.start();
     } else {
        thread.resume();
     }
   }
}
/**
*/
public void stop() {
   if(thread != null) {
      thread.suspend();   
   }
}
/**
*/
public void clear() {
   if(thread != null) {
      thread.stop();
      thread = null;
   }
}
/**
*/
public void run() {
   while(thread != null && thread.isAlive()) {
      set(time-1);
      try {
          thread.sleep(1000);
      } catch(InterruptedException e) {}
   }
}
... 
 
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Самообновление таймера в JLabel???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]