Quando si fa clic su uno dei pannelli presenti in un JTabbedPane
, è necessario eseguire alcune azioni all'inizio. Supponiamo, ad esempio, di controllare il nome utente e la password. Solo se quelli corrispondono, le operazioni particolari del pannello devono essere eseguite. Puoi suggerire qualche metodo?JTabbedPane: azioni eseguite prima di visualizzare la scheda selezionata
risposta
Non sono sicuro di comprendere appieno la tua domanda, ma vorrei fare qualcosa di simile:
- Aggiungi un ChangeListener al JTabbedPane per ascoltare per la prima scheda click.
- Quando si verifica ChangeEvent, eseguire l'accesso su un thread in background utilizzando SwingWorker.
- Se l'accesso è riuscito, eseguire le operazioni UI richieste nel thread di invio eventi.
Ad esempio:
tabbedPane.addChangeListener(new ChangeListener() {
private boolean init;
public void stateChanged(ChangeEvent e) {
if (!init) {
init = true;
new SwingWorker<Boolean, Void>() {
@Override
protected void done() {
try {
boolean loggedIn = get();
if (loggedIn) {
// Success so perform tab operations.
}
} catch (InterruptedException e1) {
e1.printStackTrace(); // Handle this.
} catch (ExecutionException e1) {
e1.printStackTrace(); // Handle this.
}
}
protected Boolean doInBackground() throws Exception {
// Perform login on background thread. Return true if successful.
return true;
}
}.execute();
}
}
});
L'azione per cambiare la scheda viene attivato da un ascoltatore del mouse nella classe utente. passa attraverso e controlla se c'è una scheda sulla coordinata cliccata e, in caso affermativo, se la scheda è abilitata. Se questo criterio viene soddisfatto, chiamerà lo setSelectedIndex(int)
sul tuo JTabbedPane
. Per intercettare la modifica della scheda, è possibile eseguire l'override di setSelectedIndex(int)
per attivare un controllo delle autorizzazioni. Dopo aver convalidato le autorizzazioni, è possibile effettuare una chiamata a super.setSelectedIndex(int)
. questo dovrebbe fare quello che vuoi.
prega di notare che se la verifica delle autorizzazioni è una chiamata a lunga corsa (cioè una chiamata a un database o un server), si dovrebbe usare qualcosa di simile a una pausa SwingWorker
il vostro trattamento, in modo che le autorizzazioni di controllo viene eseguito fuori dal AWT EventQueue
e la chiamata a super.setSelectedIndex(int)
viene effettuata su AWT EventQueue
.
grazie per la risposta .. –