2013-05-31 6 views
2

J'ai un JTabbedPane et je dois remplacer le composant de l'onglet 1 lorsque l'utilisateur le sélectionne. Je ne peux pas ajouter directement le bon composant au démarrage de l'application car je n'ai pas de données complètes pour le générer.Modifier le composant JTabbedPane dans l'onglet de sélection

je besoin de quelque chose comme ceci:

int tabTochange = 1; 
    tabbedPane.addChangeListener(new ChangeListener() { 
     public void stateChanged(ChangeEvent e) { 
      if (tabbedPane.getSelectedIndex() == tabTochange) 
      { 
       JComponent component = generataComponent(); 
       tabbedPane.removeTabAt(tabTochange); // Remove old tab 
       // add new one 
       tabbedPane.insertTab("title", null, component, "tip", tabTochange); 

      } 
     } 
    }); 

Mais ce code ne fonctionne pas, il supprime l'onglet d'autres onglets après onglet 1 et dupliquer.

Répondre

3

Au lieu de removeTabAt() et insertTab(), utilisez getComponentAt(tabTochange) ou getSelectedComponent() pour obtenir une référence du composant . Mettez à jour le composant si nécessaire, en utilisant peut-être CardLayout.

+1

De cette façon, l'onglet tabbedPane 1 restant comme premier créé, également si j'ai modifié les caractéristiques du composant getComponentAt (tabTochange). Peut-être que je dois forcer une sorte de redessiner? – Alvins

+1

L'approche habituelle est 'revalidate()' et 'repaint()', que 'CardLayout' gère pour vous. – trashgod

2
  • Je pense que JTabbedPane/CardLayout a été développé comme interface graphique statique sans ajouter/supprimer/modifier les onglets/Cartes, ne pas changer le numéro, les commandes, le nombre d'onglets/cartes sur l'exécution, même si il est possible

  • vous devez résoudre tas d'effets secondaires, de tenir des onglets (indexation et ses JComponents) dans tableau secondaire

  • mis JList (DTree dépend de la structure) sur le côté gauche de JFrame, créez un JPanel à chacun des Items/Nodes, placez ces JPanels sur CardLayout, ajoutez correctement List (Tree) SelectionListener, puis sélectionnez à partir de la souris/Clavier de tir basculer entre la carte, rien dans cette stucture est dynamique (sauf valeur JComponents), tout est préparé sur GUI démarrage

0

Si tab1 a un index de 1 et tab2 a un index de 2. Après avoir supprimé tab1, tab2 n'aurait-il pas maintenant un index de 1? Ainsi, quand vous allez ajouter un nouvel onglet avec un index de 1, cela ne fonctionnera pas. Peut-être qu'il y a un moyen de changer simplement tab1.

En outre, chaque onglet doit contenir un JPanel, il peut donc être utile de simplement modifier le JPanel correspondant et le texte du titre de l'onglet.

Je sais que cela ne répond pas complètement à votre question, mais je ne pense pas avoir suffisamment de points pour le mettre en commentaire. Espérons que cela aide :)

Questions connexes