Java Swing clessidra GUI
-
20-09-2019 - |
Domanda
C'è un JTabbedPane
Nel mio Altalena .
Quando l'utente clicca su una scheda, il programma richiede un po 'per ottenere i dati ed elaborare i risultati, poi mostra i risultati nella scheda selezionata.
Come faccio a visualizzare una clessidra, o qualcosa di quell'effetto in modo che l'utente sa che è l'elaborazione dei dati? Per non fare clic sulla scheda di nuovo prima che venga completata esso lavoro.
Soluzione
Un JProgressBar (possibilmente in modalità indetermiante) suoni destra - mettere che sulla scheda fino a quando i dati sono stati scaricati. Un'interfaccia utente ben progettato non dovrebbe obbligare l'utente ad attendere per le attività a lungo in esecuzione per completare e invece consentire loro di fare qualcosa d'altro mezzo.
Altri suggerimenti
Il modo più semplice è quello di chiamare solo setCursor sul componente appropriato (probabilmente la finestra di primo livello) con l'appropriato cursore .
component.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
E poi impostarlo indietro quando si è fatto.
component.setCursor(Cursor.getDefaultCursor());
setCursor (int) è deprecato. Questo è probabilmente un po 'più pulito:
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
Come le altre risposte menzionano, è possibile impostare un cursore di attesa, ma anche parlare di prevenire ulteriori clic del mouse. È possibile utilizzare una lastra di vetro per evitare clic su componenti fino a quando la lunga operazione è terminata. Oltre alla tutorial Sun sulla lastra di vetro , c'è un bel esempio a http://www.java2s.com /Code/Java/Swing-JFC/DemonstrateuseofGlassPane.htm
lo farei come altri accennato
- Modificare il cursore
- Usa uno SwingWorker
- Visualizza l'progressbar o un'immagine animata nel glasspane
- Nascondere il glasspane quando il compito è completato
- Ripristina il cursore predefinito