2009-06-30 19 views

risposta

7

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

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.

+0

grazie per la risposta .. –

Problemi correlati