Как мне реализовать коды, которые работают как приложение таймера с использованием awt, swing, Thread, при соблюдении некоторых условий? - PullRequest
0 голосов
/ 03 августа 2020

Мне нужно создать коды таймера Java, используя awt, swing, Thread.

Обзор возможного приложения имеет ниже 4 функции.

  1. В приложении всего одна кнопка.

  2. Сначала кнопка отображает «СТАРТ» на самой кнопке.

  3. Dynami c время отображается на кнопке при нажатии кнопки.

  4. Когда кнопка нажата во время отсчета времени, кнопка останавливает отсчет и отображает «СТАРТ».

Я написал код, такой как ниже.

boolean isCounting = false;

int cnt = 0;

void counter() {
    while (isCounting == true) {
        btn.setText(Integer.toString(++cnt));
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

public void actionPerformed(ActionEvent e) {
    if (isCounting == true) {
        isCounting = false;
    } else {
        isCounting = true;
        counter();
    }

}

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

В этом коде после нажатия кнопки вызывается функция «счетчик», но значение на кнопке никогда не изменяется, пока кнопка не будет нажата.

I должны сделать коды, удовлетворяющие вышеуказанным условиям.

Как мне понять одолжить?

1 Ответ

0 голосов
/ 03 августа 2020

Если я правильно понял ваш вопрос, то этот фрагмент, который я быстро собрал, должен сработать для вас.

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class Testing {

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            Testing t = new Testing();
        }
    });
}

private Timer timer;
private JFrame frame;
private JButton btn;
private int timePassed;

public Testing() {

    frame = new JFrame();
    timer = new Timer(1000, new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            timePassed++;
            updateTimeOnButton();
        }
    });
    btn = new JButton("START");

    btn.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (timer.isRunning()) {
                timer.stop();
                btn.setText("START");
            } else {
                timePassed = 0;
                timer.start();
                updateTimeOnButton();
            }
        }
    });
    frame.getContentPane().add(btn);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.setSize(new Dimension(300, 300));
}

private void updateTimeOnButton() {
    btn.setText(timePassed + " seconds");
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...