Po kliknięciu jednego z paneli w kodzie JTabbedPane
, należy wykonać kilka czynności na początku. Powiedz na przykład, że muszę sprawdzić nazwę użytkownika i hasło. Tylko jeśli te pasują, należy wykonać określone operacje panelu. Czy możesz zaproponować jakieś metody?JTabbedPane: Czynności wykonywane przed wyświetleniem wybranej karty
Odpowiedz
Nie wiesz, w pełni rozumiem Twoje pytanie, ale chciałbym zrobić coś takiego:
- Dodaj ChangeListener do JTabbedPane słuchać na pierwszej zakładce kliknięcia.
- Po wystąpieniu zdarzenia ChangeEvent wykonaj logowanie w wątku tła za pomocą SwingWorker.
- Jeśli logowanie zakończy się pomyślnie, wykonaj wymagane operacje interfejsu użytkownika w wątku wysyłki zdarzeń.
Na przykład:
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();
}
}
});
Akcja zmienić kartę jest wyzwalany przez słuchacza myszy w klasie UI. przechodzi i sprawdza, czy na klikniętej współrzędnej znajduje się zakładka, a jeśli tak, czy zakładka jest włączona. Jeśli to kryterium zostanie spełnione, zadzwoni pod numer setSelectedIndex(int)
pod numer JTabbedPane
. Aby przechwycić zmianę tabulatora, można zastąpić setSelectedIndex(int)
, aby uruchomić sprawdzanie uprawnień. Po zatwierdzeniu uprawnień możesz zadzwonić pod numer super.setSelectedIndex(int)
. to powinno robić, co chcesz.
Należy pamiętać, że jeśli kontrola uprawnień jest długotrwałym połączeniem (tj. Połączeniem z bazą danych lub serwerem), należy użyć czegoś takiego, jak SwingWorker
przerwać przetwarzanie, tak aby sprawdzanie uprawnień odbywało się z poziomu AWT EventQueue
a wywołanie super.setSelectedIndex(int)
odbywa się na AWT EventQueue
.
thanx za odpowiedź ur .. –