Напоминание с использованием JOptionPane

Я разрабатываю одно приложение типа напоминания с использованием Java Swing.

В этом я даю пользователю два варианта, используя JOptionPane YES_NO_OPTION. Но я хочу, чтобы в течение 10 минут пользователь не вводил никаких данных, он должен выбрать ДА в качестве опции по умолчанию.

что я должен сделать для этого?

Пожалуйста, проверьте ниже код...

public void snooze()
{
    int action = JOptionPane.showConfirmDialog(null, "Yes = close citrix and Aventail \n No = snooze after 30min", "Close", JOptionPane.YES_NO_OPTION);

    if(action == 0){

        killcitrix();
        endaventail();
        }

    else{
        JOptionPane.showMessageDialog(null, "Will snooze after 30min");

        try {
            TimeUnit.SECONDS.sleep(30);
        } catch (InterruptedException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }

        snooze();
    }
}

1 ответ

Решение

Как уже упоминалось user1803551, используйте Timer, Вот пример:

  1. после 10 секунд бездействия (если пользователь не нажал ни одной кнопки), диалоговое окно автоматически исчезнет, ​​и выбранный параметр будет JOptionPane.YES_OPTION
  2. Если пользователь нажал "Нет", новый JOptionPane с теми же функциями появится через 5 секунд.
  3. предварительный просмотр

Код:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.Timer;
import javax.swing.border.TitledBorder;

public class Example {
    private int choice;
    private JTextArea log;

    public Example() {
        log = new JTextArea();
        log.setEditable(false);
        JFrame frame = new JFrame();
        frame.add(log);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 600);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        showConfirmDialog(frame);
    }

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

    public void showConfirmDialog(Component parent) {
        Timer timer = new Timer(0, null);
        Timer timer2 = new Timer(0, null);
        log.append("Will automatically press 'Yes' after 10 seconds.\n");
        timer.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                for (Window window : Window.getWindows()) {
                    if (window instanceof JDialog) {
                        JDialog dialog = (JDialog) window;
                        if (dialog.getContentPane().getComponentCount() == 1
                                && dialog.getContentPane().getComponent(0) instanceof JOptionPane
                                && dialog.getTitle().equals("Dialog")) {
                            dialog.dispose();
                            choice = JOptionPane.YES_OPTION;
                            log.append("Programmatically pressed 'Yes' on the JOptionPane due to inactivity of user\n");
                        }
                    }
                }
                timer.stop();
                timer2.stop();
            }
        });
        timer.setInitialDelay(10 * 1000);
        timer.start();

        choice = JOptionPane.showConfirmDialog(parent, "", "Dialog", JOptionPane.YES_NO_CANCEL_OPTION);
        if (choice == JOptionPane.NO_OPTION) {
            log.append("Dialog will reappear in 5 seconds\n");
            timer2.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    log.append("Dialog reappeared\n");
                    showConfirmDialog(parent);
                    timer2.stop();
                }
            });
            timer2.setInitialDelay(5 * 1000);
            timer2.start();
        }
        timer.stop();
    }
}
Другие вопросы по тегам