Песочные часы с графическим интерфейсом Java Swing

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

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


person Frank    schedule 21.12.2009    source источник


Ответы (5)


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

person Michael Borgwardt    schedule 21.12.2009
comment
С этой целью я надеюсь, что длительная задача выполняется в отдельном потоке. - person Powerlord; 21.12.2009
comment
Я попробую это, это имеет смысл, чтобы пользователь знал, как долго ждать. - person Frank; 21.12.2009

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

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

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

component.setCursor(Cursor.getDefaultCursor());
person Dan Dyer    schedule 21.12.2009
comment
Отлично, это просто и эффективно. - person Frank; 21.12.2009
comment
Это очень помогло. Спасибо. - person Radu Murzea; 09.05.2013

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

setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
person Hermann Hans    schedule 21.12.2009

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

person clartaq    schedule 21.12.2009

я бы, как и другие упомянутые

  • Изменить курсор
  • Используйте SwingWorker
  • Отображение индикатора выполнения или анимированного изображения на стекле
  • Скрыть стекло, когда задача выполнена
  • Восстановить курсор по умолчанию
person John Doe    schedule 28.12.2009