Заставить пользователя ждать с помощью Swing - PullRequest
3 голосов
/ 12 марта 2012

Я хочу заставить пользователя ждать определенное время (10 секунд).Я знаю, что в JSP или в сервлетах мы используем тег META <META HTTP-EQUIV="Refresh" CONTENT="3">.Есть ли способ в Swing, что мы можем заставить пользователя ждать некоторое время.Я использую Swing;Я хочу заставить пользователя ждать определенное количество времени, и я хочу отобразить некоторую информацию, которая будет извлечена из базы данных.Возможно ли это через Swing?

Ответы [ 4 ]

5 голосов
/ 12 марта 2012

Вы можете использовать javax.swing.Timer. Например:

enter image description here

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

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

public class SimpleTimer extends JFrame implements ActionListener 
{
    private JLabel label;
    private Timer timer;
    private int counter = 10; // the duration
    private int delay = 1000; // every 1 second
    private static final long serialVersionUID = 1L;

    public SimpleTimer()
    {
        super("Simple Timer");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(300, 65);
        label = new JLabel("Wait for " + counter + " sec");
        getContentPane().add(label);
        timer = new Timer(delay, this);
        timer.setInitialDelay(0);
        timer.start();
        setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new SimpleTimer();
            }
        });
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        if(counter == 0)
        {
            timer.stop();
            label.setText("The time is up!");
        }
        else
        {
            label.setText("Wait for " + counter + " sec");
            counter--;
        }
    }
}
3 голосов
/ 12 марта 2012

До появления WebSockets серверы HTTP не могли отправлять «события» клиентов HTTP;взаимодействия были в основном запрос-ответ.Многие приложения решают эту проблему, используя подход опроса (на стороне клиента).Метатег обновления является одним из способов реализации опроса.

Swing очень отличается - у вас есть полная сила событий.Таким образом, идея заставить пользователя ждать в течение заданного промежутка времени обычно является неправильным взаимодействием.(Некоторая игра / викторина / анимация - это несколько исключений, где простое ожидание имеет смысл.)

Вы должны разработать графический интерфейс Swing, который будет функциональным и отзывчивым, пока результаты не будут вычислены / получены,Как только результаты станут доступны, обновите модель и запустите событие , сообщающее, что модель изменилась.

Сама модель может выполнять фоновые вычисления, опросы и т. Д. Какнеобходимо;этот код не является специфическим для свинга.Если вам нужна помощь по этому аспекту, подумайте о том, чтобы искать / спрашивать об этом отдельно в Переполнении стека.

Наконец, помните, что спящий в колебательном потоке сделает пользовательский интерфейс не отвечающим.И на связанной ноте, любое событие, вызванное вашей моделью, должно быть поставлено в очередь в потоке событий Swing.См. SwingUtilities.invokeLater (...) о том, как это сделать.

2 голосов
/ 12 марта 2012

Я думаю JProgressBar - это то, что вам нужно! ..

1 голос
/ 12 марта 2012

пробовал с темами. Использование

   Thread.sleep(10000);

Вы можете легко достичь этого. Вы можете получить больше информации здесь

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