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

Composants Java Discussion :

Afficher la JCombobox dans la JTable [Débutant(e)]


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 35
    Par défaut Afficher la JCombobox dans la JTable
    Bonjour,

    Je sais plusieurs topique ont déjà était créé à ce sujet, mais je n'arrive pas à les mettre en œuvre. Donc je ré-ouvre un topique dans l'espoir de mieux comprendre.

    Comme l'indique le titre, je cherche à afficher une Jcombobox dans une JTable.
    Problème, m'a JCombobox évolue constamment, Et surtout, elle est vide au début. Or dans tous les exemples que je vois, la JCombobox est initialisé à l’avance (et Il y a beaucoup de superflue autour de la partie importante, ceux qui m'empêche de bien cerner la partie importante).
    Pour l'instant voilà ce que je fais(en résumé):


    Initialisation de la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private int nombre_trou=16;
    private JTable tableau;
    private String table_titre[]={"Vial","Element Associé"};
    ZModel model=new ZModel(new Object[nombre_trou][table_titre.length], table_titre);
    tableau = new JTable(model);
    le modèle:
    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
     
    class ZModel extends AbstractTableModel{
      /**
             * 
             */
    	private static final long serialVersionUID = 1L;
    private Object[][] data;
      private String[] title;
     
      //Constructeur
      public ZModel(Object[][] data, String[] title){
        this.data = data;
        this.title = title;
      }
     
      //Retourne le nombre de colonnes
      public int getColumnCount() {
        return this.title.length;
      }
     
      //Retourne le nombre de lignes
      public int getRowCount() {
        return this.data.length;
      }
     
      //Retourne la valeur à l'emplacement spécifié
      public Object getValueAt(int row, int col) {
        return this.data[row][col];
      } 
     
      public String getColumnName(int col) {
    	  return this.title[col];
    	}
     
      public void setValueAt(Object arg0, int row, int col) {
    		this.data[row][col]=arg0;
    		fireTableCellUpdated(row, col);
      }
      public Class getColumnClass(int col){
    	  //On retourne le type de la cellule à la colonne demandée
    	  //On se moque de la ligne puisque les types de données sont les mêmes quelle que soit la ligne
    	  //On choisit donc la première ligne
    	  return this.data[0][col].getClass();
    	}
    //Retourne vrai si la cellule est éditable : celle-ci sera donc éditable
    public boolean isCellEditable(int row, int col){
      return true; 
    }
     
    }

    l'ajout de la Jcomobox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private JComboBox<String> JCB=new JComboBox<String>() ;
    JCB.addItem("Rien");
    JCB.addItem("n'importe quoi");
    JCB.setSelectedItem("Rien");
     
    //on initialise la 2eme colonne (colonne 1):
     
    		for(int i=0;i<nombre_trou;i++){
    			tableau.setValueAt(JCB, i, 1);
    		}
    		tableau.setDefaultRenderer(JComponent.class, new TableComponent());
    		tableau.getColumn(table_titre[1]).setCellEditor(new DefaultCellEditor(JCB));
    }
    Pour l'instant je ne veut pas gérer l'ajout d'Item à ma JCombobox.
    Je veux juste réussir un affichage simple.
    Le bug: quand je click pour changer m'a valeur, sa affiche n'importe quoi:

    Merci a tous ceux qui se pencheront sur mon problème.
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il ne faut pas ajouter les composants dans le modèle de la JTable. Celui ci n'est sensé contenir que les données.


    Et, de même, il ne sert à rien de l'afficher en permanence, cela diminue la lisibilité de ta JTable.

    En fait, il n'est nécessaire d'avoir la combo box apparente que lors de l'édition de la cellule.

    Donc, rien de plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private JComboBox<String> JCB=new JComboBox<String>() ;
    JCB.addItem("Rien"); 
    JCB.addItem("n'importe quoi");
     
    for(int i=0;i<nombre_trou;i++){
        tableau.setValueAt("Rien", i, 1); 
    }         
    tableau.getColumn(table_titre[1]).setCellEditor(new DefaultCellEditor(JCB));

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 35
    Par défaut Ok
    Merci pour cette réponse,

    Ça m'a fait comprendre que la case prenait automatiquement la valeur du JCombobox choisit (donc que la JCombobox n'est qu'un aspect, un affichage), ce qui rend les choses beaucoup plus simple.

    Par contre un détaille.
    Je veux que la JCombobox soit apparente en permanence pour l'ergonomie du système. Il faut que l'utilisateur comprenne directement qu'il peut choisir en cliquant dessus.

    Si tu peux, ou quelqu'un peut m'indiquer comment, car sur le coup, je croyais que c'était cette ligne qui permettait cette affichage, Mais on ne dirait pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau.setDefaultRenderer(JComponent.class, new TableComponent());

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Nope.

    En effet, ton modèle ne contient pas de JComponent. Donc aucune chance que ton ComponentRenderer soit utilisé.

    Plutôt quelque chose dans ce style.

    http://www.java2s.com/Code/Java/Swin...eComponent.htm

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 35
    Par défaut Merci
    J'avais trouvé un code similaire, mais il utilisait une JCombobox prédéfinie.
    Mais avec ton code, si je modifie mon code en remplacent m'a JCB par un String au quel je rajoute les éléments nouveaux, sa devrait marcher. (Attention le casse-pipe ).

    Si sa marche, je reviens mettre un petit .

    Merci à toi sinok pour ces réponses claires et rapides.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2013
    Messages : 35
    Par défaut
    Bon je viens de modifier mon programme, sa marche.
    J'utilise une Arraylist (car je n'arrivai pas rajouter un élément dans mon String[]).

    Par contre à chaque fois que je rajoute un élément à l'Arraylist, je suis obligé de relancer les lignes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tableau.getColumn(table_titre[1]).setCellEditor(new MyComboBoxEditor(mon_arraylist));
    tableau.getColumn(table_titre[1]).setCellRenderer(new MyComboBoxRenderer(mon_arraylist));
    Je trouve ça bizarre vue qu'avant, je n'avais pas besoin de le faire.
    Si on peut me répondre à cette question.

    Edit
    ---------------------------------------------------------
    2 petits problèmes:
    - il me faut cliquez 2 fois pour quel la liste déroulante s'affiche (sélectionné la ligne, puis la JCombobox).Je voudrais que ça s'affiche du premier coup.
    - la ligne sélectionné, ne se met pas à jour tant que je la re-selectionne pas (faut que je sélectionne une autre ligne puis revenir sur celle voulue)

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Par défaut
    Probablement parce qu'avant tu les mettais dans ton modèle et le modèle se met à jour grâce à la méthode fireTableDataChanged().
    Là tu as mis cela dans l'éditeur et le renderer, donc soit tu les mets à jour par un autre moyen (en écoutant la table ou le modèle), soit tu change ton renderer et ton éditeur (ce que tu as fait !)

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/07/2008, 21h06
  2. Afficher un TreeModel dans une JTable ?
    Par mugwump dans le forum Composants
    Réponses: 5
    Dernier message: 09/08/2007, 13h41
  3. Afficher les données dans ma JTable
    Par jojo57 dans le forum JDBC
    Réponses: 1
    Dernier message: 01/12/2006, 22h20
  4. Réponses: 6
    Dernier message: 20/09/2006, 12h01
  5. supprimer un item d'un jcombobox dans une jtable
    Par bellout dans le forum Composants
    Réponses: 6
    Dernier message: 22/06/2006, 17h06

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