2009-06-30 7 views

Répondre

7

Pas sûr que je comprends parfaitement votre question, mais je ferais quelque chose comme:

  • Ajouter un ChangeListener au JTabbedPane pour écouter le premier clic onglet.
  • Lorsqu'un événement ChangeEvent se produit, effectuez la connexion sur un thread d'arrière-plan à l'aide d'un SwingWorker.
  • Si la connexion réussit, effectuez les opérations d'interface utilisateur requises sur le fil d'envoi d'événement.

Par exemple:

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'action de changer l'onglet est déclenchée par un auditeur de la souris dans la classe de l'interface utilisateur. il passe en revue et vérifie s'il y a un onglet à la coordonnée cliquée et si oui, si l'onglet est activé. Si ce critère est rempli, il appellera setSelectedIndex(int) sur votre JTabbedPane. Pour intercepter le changement d'onglet, vous pouvez ignorer setSelectedIndex(int) pour déclencher une vérification des autorisations. Une fois les autorisations validées, vous pouvez appeler le super.setSelectedIndex(int). Cela devrait faire ce que vous voulez. S'il vous plaît noter que si la vérification des autorisations est un appel de longue durée (appel à une base de données ou un serveur), vous devez utiliser quelque chose comme un SwingWorker briser votre traitement, de sorte que la vérification des autorisations est effectuée sur le AWT EventQueue et l'appel au super.setSelectedIndex(int) est fait sur le AWT EventQueue.

+0

merci pour votre réponse .. –

Questions connexes