2009-06-30 17 views

Odpowiedz

7

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(); 
     } 
     } 
    }); 
3

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.

+0

thanx za odpowiedź ur .. –

Powiązane problemy