IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

Onglets dynamiques avec JTabbedPane


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut Onglets dynamiques avec JTabbedPane
    Bonjour,

    J'ai une première fenêtre avec 3 Jcombobox (il pourrait y en avoir plus dans une prochaine version du logiciel) et un des boutons appelle une autre fenêtre où je souhaite utiliser un onglet par contenu de Jcombobox.

    Pour simplifier, on va dire que la Jcombobox peut avoir 2 valeurs. En fonction de cette valeur je désire avoir tel ou tel panel dans l'onglet correspondant.

    J'arrive à avoir le bon nombre d'onglet avec le nom de la valeurs des Jcombobox avec ce code (situé dans le constructeur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    createPage1();
    createPage2();
     
     
    tabbedPane = new JTabbedPane(JTabbedPane.TOP);
     
    for(int i=0 ; i<operations.length ; i++)
    {
         if(operations[i].equals("Valeur1 JCobobox"))
         {
         	tabbedPane.addTab( operations[i], panelGroupement1[i]);
         }
         else tabbedPane.addTab( operations[i], panelGroupement2[i]);
    }
    topPanel.add(tabbedPane, BorderLayout.CENTER );
    Les fonctions createPage1 et createPage2 contiennent tous les composants qui devraient être dans les onglets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void createPage1(){
     
    	panelGroupement1[0] = new JPanel(new GridBagLayout());
    	panelGroupement1[0].add(...);
    	...
    }
    public void createPage2(){
     
    	panelGroupement2[0] = new JPanel(new GridBagLayout());
    	panelGroupement2[0].add(...);
    	...
    }
    Mon problème est que seuls les onglets s'affichent mais pas leur contenu.
    Quelqu'un sait-il pourquoi ?

    Merci.
    Bonne journée.

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Un peu confus là ...

    J'essaye de reprendre.

    Problème 1) Tu as une combobox avec plusieurs valeurs et tu voudrais créer autant d'onglet ?
    Dans ce cas deux options, soit tu stockages la liste des valeurs à part et que tu utilises cette même liste pour créer la liste de valeurs de la combobox et la liste des onglets.
    Ou bien tu vas piocher directement dans le modèle de la combobox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    // Assume values are only String.
    public class TabBuilder {
      public static JTabbedPane buildTab(List<String> values) {
        JTabbedPane pane = new JTabbedPane();
        for (String value : values) {
          //TODO Build component based on value
          Component component = new JLabel(value);
     
          pane.addTab(value, component);
        }
        return pane;
      }
     
      public static JTabbedPane buildTab(JComboBox combobox) {
        JTabbedPane pane = new JTabbedPane();
        for (int i = 0; i < combobox.getItemCount(); i++) {
          String value = String.valueOf(combobox.getItemAt(i));
     
          //TODO Build component based on value
          Component component = new JLabel(value);
     
          pane.addTab(value, component);
        }
        // Synchronized selection
        pane.setSelectedIndex(combobox.getSelectedIndex());
        return pane;
      }    
    }
    Problème 2) Tu as une combobox qui te permet de faire varier le composant à afficher dans un panneau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    public class TabSwitcher {
     
     
      public static void gui() {
        final Map<String, String> values = new LinkedHashMap<String, String>();
        values.put("pane1", "Pane 1");
        values.put("pane2", "Pane 2");
     
        JComboBox combobox = new JComboBox(values.keySet().toArray());
        final CardLayout layout = new CardLayout();
        final JPanel pane = new JPanel(layout);
     
        for (Entry<String, String> entry : values.entrySet()) {
          //TODO Build component based on value
          Component component = new JLabel(entry.getValue());
     
          pane.add(component, entry.getKey());
        }
     
        // Modifies renderer to prefix value by "Show " (ie "Show Pane 1").
        combobox.setRenderer(new BasicComboBoxRenderer() {
          @Override
          public Component getListCellRendererComponent(JList list, Object value,
              int index, boolean isSelected, boolean cellHasFocus)
          {
            return super.getListCellRendererComponent(list, "Show " + values.get(value), index, isSelected,
                cellHasFocus);
          }
        });
     
        // Synchronizes combobox and switched pane
        combobox.addItemListener(new ItemListener()
        {
          @Override
          public void itemStateChanged(ItemEvent e)
          {
            if (e.getStateChange() == ItemEvent.SELECTED)
            {
              layout.show(pane, String.valueOf(e.getItem()));
            }
          }
        });
        layout.show(pane, String.valueOf(combobox.getSelectedItem()));
     
        // Show result
        JFrame frame = new JFrame();
        frame.getContentPane().add(combobox, BorderLayout.PAGE_START);
        frame.getContentPane().add(pane, BorderLayout.CENTER);
        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        frame.setSize(640, 480);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
      }
     
      public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable()
        {
          @Override
          public void run()
          {
            gui();        
          }
        });
      }
    }
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut
    Merci pour la réponse.

    Je me doutais que je ne m'étais pas exprimé correctement.
    En fait, je récupère ce qui est sélectionné dans les Jcombobox.
    Ensuite, j'affiche autant d'onglets qu'il y a de Jcombobox non vides avec comme nom le nom qui est dans la JCombobox de la fenêtre précédente.

    Jusque là tout marche.

    Mais quand je clique sur les onglets leur contenu ne s'affiche pas.
    Pourtant avant de créer les onglets, j'utilisais le même code qu'il y a dans la fonction createPage1() et l'affichage se faisait très bien.

    J'espère avoir été un peu plus clair.

  4. #4
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Remplace temporairement le contenu de tes onglets par des JLabel. Ca permet de tester facilement ce qui ne va pas

    Le mieux serait que tu oublies le principe des combobox pour simplement en revenir à un problème d'affichage du contenu des onglets.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 80
    Points
    80
    Par défaut
    Finalement, j'ai fais autrement, au lieu d'avoir des onglet, j'enregistre les données que je souhaite garder dans un fichier temporaire et je ré-affiche la fenêtre pour enregistrer l'opération suivante.
    Ça marche très bien comme ceci.

    Merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Menu accordion dynamique avec dans chaque onglet un treePanel
    Par beben06 dans le forum Ext JS / Sencha
    Réponses: 3
    Dernier message: 12/07/2010, 09h51
  2. Onglet avec JTabbedPane
    Par riderfun dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 27/01/2009, 14h36
  3. Onglets avec JTabbedPane ?
    Par seb2020 dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 10/04/2007, 22h52
  4. JTabbedPane avec onglets dynamique
    Par oOoOuuhmAn dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 18/03/2006, 16h23
  5. comment creer un alias dynamique avec BDE et ODBC
    Par david33 dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/07/2002, 11h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo