Java Swing GUI песочные часы - PullRequest
       21

Java Swing GUI песочные часы

4 голосов
/ 21 декабря 2009

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

Как отобразить песочные часы или что-то в этом роде , чтобы пользователь знал, что он обрабатывает данные? Не нажимать на вкладку еще раз, пока она не закончит свою работу.

Ответы [ 5 ]

24 голосов
/ 21 декабря 2009

Самый простой способ - просто вызвать setCursor для соответствующего компонента (возможно, окна верхнего уровня) с соответствующим Курсором .

component.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

А затем верните его обратно, когда закончите.

component.setCursor(Cursor.getDefaultCursor());
6 голосов
/ 21 декабря 2009

A JProgressBar (возможно, в режиме Indetermiante) звучит правильно - помещайте это на вкладку, пока данные не будут получены. Хорошо продуманный пользовательский интерфейс не должен заставлять пользователя ждать выполнения долгосрочных задач, а вместо этого позволять ему делать что-то еще между ними.

3 голосов
/ 21 декабря 2009

setCursor (int) устарела. Это, вероятно, немного чище:

setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
0 голосов
/ 28 декабря 2009

Я бы как другие упоминал

  • Изменить курсор
  • Используйте SwingWorker
  • Отображение индикатора выполнения или анимированного изображения на стекле
  • Скрыть стекло, когда задание выполнено
  • Восстановить курсор по умолчанию
0 голосов
/ 21 декабря 2009

Как уже упоминалось в других ответах, вы можете установить курсор ожидания, но вы также упомянули, что не нужно нажимать дополнительные кнопки мыши. Вы можете использовать стеклянную панель, чтобы предотвратить щелчки на компонентах, пока не завершится длительная операция. В дополнение к Sun учебники на стеклянной панели, есть хороший пример на http://www.java2s.com/Code/Java/Swing-JFC/DemonstrateuseofGlassPane.htm

...