Закройте showOptionDialog через 5 секунд, если не нажата кнопка в Java - PullRequest
0 голосов
/ 03 октября 2018

У меня есть showOptionDialog, который спрашивает, хочет ли пользователь что-то удалить.Я хочу закрыть рамку и не удалять, если ничего не нажимается через 5 секунд.Как я могу достичь этого?

Вот мой код:

         JFrame frame = new JFrame();
         frame.setAlwaysOnTop(true);
         Object[] options = {"OK"};
         int n = JOptionPane.showOptionDialog(frame,"Do you want to delete?","Title",JOptionPane.PLAIN_MESSAGE,JOptionPane.QUESTION_MESSAGE,null,options,options[0]);
         if (JOptionPane.OK_OPTION == n) {
             System.out.println("Delete");
         } else {
             System.out.println("Not Delete");
         }

1 Ответ

0 голосов
/ 03 октября 2018

Читайте JOptionPane API.На "Direct Use" есть раздел JOptionPane.

Вам потребуется создать панель параметров и диалог вручную.Когда вы сделаете это, у вас будет ссылка на диалоговое окно, используемое в панели параметров, что означает, что вы можете удалить () диалоговое окно, если оно все еще открыто.

Таким образом, вам также нужно будет создать Таймер поворота .Когда таймер срабатывает, вы используете dialog.dispose().

. Вам нужно будет запустить таймер ДО того, как диалоговое окно станет видимым.

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

Итак, основная логика (взятая из API) будет выглядеть так:

 JOptionPane pane = new JOptionPane(arguments);
 pane.set.Xxxx(...); // Configure
 JDialog dialog = pane.createDialog(parentComponent, title);

 Timer timer = new Timer(5000, (e) -> dialog.dispose());
 timer.start();

 dialog.setVisible(true);
 timer.stop();
 ...

Редактировать:

Я изменил его на:

JOptionPane pane = new JOptionPane(
    "Do you want to delete?",
    JOptionPane.OK_CANCEL_OPTION,
    JOptionPane.ERROR_MESSAGE,
    null,
    options,
    options[0]); 

Я вижу так много проблем с приведенным выше утверждением:

  1. Почему вы используете этот конструктор?Почему вы передаете так много нулевых параметров?Как я упоминал в моем предыдущем комментарии, есть более простые конструкторы для использования.

  2. Почему вы указываете «тип опции» перед «типом сообщения».Вы читали API?Можете ли вы показать мне конструктор, где это действительно?

3.Почему вы используете JOptionPane.ERROR_MESSAGE?Это вопрос?Разве вы не должны использовать JOptionPane.QUESTION_MESSAGE?

Вы даже читали API, как я предложил?Вы не можете программировать, если не читаете API и не понимаете, что это за разные конструкторы и методы.

возвращает целое число, но где в этом случае я могу его увидеть?

Может возвращать или не возвращать целое число в зависимости от того, как был закрыт диалог.Если вы нажмете кнопку, это будет целое число.Если таймер сработает, это будет строка.

Опять же, вы читали раздел из API на Direct Use?Он показывает вам, как получить значение, возвращаемое из панели параметров, и проверить его значение.

Итак, еще раз я спрашиваю, вы читали API?Есть ли что-то в коде, представленном в API, который вы не понимаете.Если это так, задайте конкретный вопрос.

...