Как реализовать диалоговое окно «Сохранение ...» в Java? - PullRequest
1 голос
/ 02 ноября 2009

Я хочу открыть диалоговое окно с надписью «Сохранение ...», и после завершения операции оно просто исчезает. Пока идет сохранение, я не хочу, чтобы пользователь мог что-либо делать. Я также не хочу кнопку ОК.

Как называется класс Java, который позволяет мне это делать?

Ответы [ 4 ]

5 голосов
/ 02 ноября 2009

Я думаю, JDialog - это то, что вы хотите - обязательно вызовите setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE), поскольку в отличие от JFrame, его поведение по умолчанию HIDE_ON_CLOSE.

3 голосов
/ 02 ноября 2009

Вот последний код, который я нашел, который примерно имитировал то, что я хотел сделать:

// Create dialog box
JDialog dialog = new JDialog(new JFrame(), "Saving...");

// IMPORTANT: setLocationRelativeTo(null) is called AFTER you setSize()
// otherwise, your dialog box will not be at the center of the screen!
dialog.setSize(200,200);
dialog.setLocationRelativeTo(null);
dialog.toFront(); // raise above other java windows
dialog.setVisible(true);

// Sleep for 2 seconds
try
{
  Thread.sleep(2000);
} catch (InterruptedException ex)
{
  Logger.getLogger(JavaDialogBox.class.getName()).log(Level.SEVERE, null, ex);
}

// Then "close" the dialog box
dialog.dispose();

Наконец, эти 3 ссылки были весьма полезны при написании кода выше:

1 голос
/ 04 ноября 2009

Я думаю, что вам может понадобиться модальный JDialog . Они довольно легко блокируют взаимодействие с пользователем для всего вашего приложения, и у вас есть дополнительный контроль.

У фрагмента кода, который вы разместили, могут возникнуть проблемы, если операция сохранения займет больше 2 секунд. Я бы посоветовал вызвать вашу функцию save () в том месте, где у вас есть Thread.sleep (). Таким образом, вы знаете, что независимо от того, сколько времени занимает сохранение, пользовательский интерфейс будет заблокирован.

1 голос
/ 03 ноября 2009

Вы также можете рассмотреть возможность использования javax.swing.JProgressBar в своем диалоге, чтобы вы могли показать, что прогресс происходит. Если у вас есть достаточно информации во время процесса сохранения, чтобы получить процент завершения, вы можете показать это, а если нет, вы можете показать ее как неопределенную (перемещение вперед и назад до завершения). Затем закройте диалоговое окно после завершения процесса сохранения - это было бы неплохим улучшением работы пользователя по сравнению с отображением статического текстового сообщения в течение фиксированного периода времени. Вот учебник с демонстрационным Java-кодом, показывающий пример диалога: http://java.sun.com/docs/books/tutorial/uiswing/components/progress.html.

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