У меня есть класс под названием Gui. Здесь я помещаю все свои ярлыки и кнопки. Он также содержит кнопку button.addactionlistener. При нажатии кнопки начинается другой поток (секундомер). Это когда секундомер входит в цикл, который продолжает обновлять мс, сек, мин в цикле while.обновление gui из потока (другой класс)
Секундомер - еще один файл класса. Секундомер содержит мс, сек, мин.
Как обновить метку gui секундомером ms, sec, min?
public class Gui {
JFrame swFrame = new JFrame("Stopwatch");
Stopwatch sw = new Stopwatch();
Thread t1 = new Thread(sw);
private JPanel p;
private JButton b1;
private JButton b2;
private JButton b3;
private JLabel l1;
private JLabel l2;
public Gui()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
swFrame.setSize(500,400);
swFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p = new JPanel();
b1 = new JButton("StartStop");
b2 = new JButton("LapTime");
b3 = new JButton("Reset");
l1 = new JLabel("bla");
l2 = new JLabel("blala");
p.add(b1);
p.add(b2);
p.add(b3);
p.add(l1);
p.add(l2);
swFrame.add(p);
b1.setActionCommand("StartStop");
b2.setActionCommand("LapTime");
b3.setActionCommand("Reset");
b1.addActionListener(new ButtonClickListener());
b2.addActionListener(new ButtonClickListener());
b3.addActionListener(new ButtonClickListener());
}
});
}
private class ButtonClickListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String command = e.getActionCommand();
if(command.equals("StartStop"))
{
if(t1.isAlive())
{
t1.interrupt();
}
else
{
t1.start();
!!!//How to update the jlabel from the moment t1.starts?!!!!
}
}
else if(command.equals("LapTime"))
{
l2.setText("Submit Button clicked.");
}
else if(command.equals("Reset"))
{
}
}
}
класс Секундомер
public class Stopwatch implements Runnable
{
private int min;
private int sec;
private long ms;
Timer timerSW = new Timer();
JLabel l1;
public void run()
{
ms = System.currentTimeMillis();
while(!Thread.currentThread().isInterrupted())
{
int seconds = (int) (ms/1000) % 60 ;
int minutes = (int) ((ms/(1000*60)) % 60);
}
}
У меня также есть класс программ, который содержит основной метод. Это называет Gui.
public class Program {
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
Gui gui = new Gui();
gui.swFrame.setVisible(true);
}
});
}
}
Для это упражнение я должен создать секундомер. Тема, которая обновляет время. И использование компонентов java swing. Я удалил SwingUtilities.invokeLater (новый Runnable() в классе Gui на данный момент. Что вы предлагаете мне делать? –
Верните его. Я бы рекомендовал шаблон наблюдателя, поэтому каждый раз, когда ваш таймер обновляется , вы уведомляете наблюдателя, который нуждается в обновлении UI. – MadProgrammer
Хорошо, спасибо, я попробую. –