Как изменить текст JLabel за x секунд - PullRequest
0 голосов
/ 12 октября 2019

Я хочу на короткое время изменить текст JLabel (есть счетчик, и если кто-то вводит неправильный ответ в текстовое поле, я хочу показать «неправильный ответ» вместо счетчика. После несколькихсекунд я хочу снова показать счетчик.)

Ответы [ 3 ]

1 голос
/ 12 октября 2019

Для выполнения с фиксированной задержкой некоторого кода, который вы хотите использовать объект таймера , в данном случае javax.swing.Timer . Вот демонстрация, которая применима к вашей ситуации:

public static void main(String[] args) {
    SwingUtilities.invokeLater(()->{
        JFrame frame = new JFrame();
        frame.setLayout(new FlowLayout());
        JLabel label = new JLabel("One");
        JButton button = new JButton("Ok");
        button.addActionListener(e -> {
            String oldText = label.getText();
            label.setText("Changed");
            Timer timer = new Timer(2000, event -> {
                label.setText(oldText);
            });
            timer.setRepeats(false);
            timer.start();
        });
        frame.add(label);
        frame.add(button);
        frame.pack();
        frame.setVisible(true);
    });
}

Слушатель для кнопки изменяет текст метки и запускает таймер Swing (здесь с предохранителем на 2 секунды). По истечении времени таймера он отправляет событие действия своему зарегистрированному слушателю (таймер), который в этом случае возвращает текст к исходному.

0 голосов
/ 12 октября 2019

Используйте переменную извне вашего paint() void, чтобы указать вашему paint() методу рисовать или не рисовать счетчик на экране. Например,

boolean wrongAnswer = true;
public void paint(Graphics g){
    if(b){
        g.drawString("Wrong Answer.", x, y);
        //It's best to use a timer, see the link provided
    }
    else{
        g.drawString(counter+"", x, y)
    }
}

почему бы не использовать thread.sleep без причины и объяснить это программисту

0 голосов
/ 12 октября 2019
// change text to error
Thread.sleep(5000); // 5000ms = 5 seconds
// change text to counter

Это легко, как вы могли это сделать. Очевидно, вы должны заменить комментарии реальным кодом.

...