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 :

Jcombobox dans JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut Jcombobox dans JTable
    Bonjour à tous,

    avant de de commencer je tiens à m'excuser car je sais que ce sujet à été traiter des centaines de fois mais je n'arrive vraiment pas à mettre une JComboBox dans une JTable, et ce malgrè la documentation disponible sur le net.

    Je construit ma JTable avec un tableModel.Voila ce que j'ai fait:

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    class MonModele extends AbstractTableModel {
                Vector nomColonne=new Vector(); //les noms de colonnes
                Vector elementUn = new Vector();
     
                public MonModele(String taxo,String onglet,String libelle,String Contextref) {
                    nomColonne.addElement("Compte");
                    nomColonne.addElement("Actif");
                    nomColonne.addElement("Operateur");
                    String StrSQL;
                    StrSQL ="SELECT COMPTE,ACTIF FROM MAPPING WHERE TAXONOMIE='"+taxo+"' AND GABARIT='"+onglet+"' AND ELEMENTNAME='"+libelle+"'  AND CONTEXTREF='"+Contextref+"'";
                    try{
                        Database connect=new Database();
                        connect.OpenDB();
                        ResultSet rs=connect.Execute(StrSQL);
     
                        while (rs.next()){
     
                            elementUn.addElement(rs.getString("COMPTE"));
                            if (rs.getString("ACTIF").equals("Y")){
                                elementUn.addElement(new Boolean(true));
                            }
                            else{
                                elementUn.addElement(new Boolean(false));
                            }
     
                            JComboBox operateur;
                            operateur=new JComboBox();
                            operateur.addItem("+");
                            operateur.addItem("-");
                            elementUn.addElement(operateur);
     
                        }
                    }
                    catch (Exception E){
                        JOptionPane.showMessageDialog(null, "Impossible de se connecter à cette BD" +
                        "Erreur " + E.getMessage(), "alert", JOptionPane.ERROR_MESSAGE);
                    }
                }
     
                public int getColumnCount() {
                return nomColonne.size();
                 }
     
                 public int getRowCount() {
                  return elementUn.size()/getColumnCount();
                 }
     
                 public String getColumnName(int columnIndex) {
                  String colName="";
                  if (columnIndex<=getColumnCount())
                    colName=(String)nomColonne.elementAt(columnIndex);
                    return colName;
                 }
     
                 public Class getColumnClass(int column){
                    return getValueAt(0, column).getClass();
                 }
     
                 public boolean isCellEditable(int rowIndex, int columnIndex) {
                  return false;
                 }
     
                 public Object getValueAt(int rowIndex, int columnIndex) {
                  return elementUn.elementAt(
                           (rowIndex*getColumnCount())+columnIndex);
                 }
     
                 public void setColumnName(Vector colNames){
                        //columnNames=new Vector(colNames.length);
                        nomColonne=colNames;
                         fireTableStructureChanged();
                }
     
                public void removeRow(int row) {
                    elementUn.removeElementAt(row);
                    fireTableRowsDeleted(row, row);
                }
            }
    Voila comment j'affecte mon model à ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    jTable1=new JTable();
    MonModele model =new MonModele( taxo, onglet, libelle, Contextref);
    jTable1.setModel(model);
    jTable1.createDefaultColumnsFromModel();
    jTable1.getTableHeader().setReorderingAllowed(false);

    Et bien entendu, dans ma cellule ça m'affiche Javax.swing.JComboBox...

    Il y a quelquechose qui m'échappe, si quelqu'un pouvait m'expliquer le fonctionnement, ça me débloquerai pas mal!

    Merci d'avance!

    EDIT: Je suis bien sur allé voir la javadoc et j'ai rajout ce petit bout de code mais sans succés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    TableColumn cH = jTable1.getColumnModel().getColumn(2);
                JComboBox operateur;
                operateur=new JComboBox();
                operateur.addItem("+");
                operateur.addItem("-");
                TableCellEditor  cellEditorRv0 = new DefaultCellEditor (operateur);
                cH.setCellEditor(cellEditorRv0);

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Bonjour, euh ... tu es loin du compte ^^

    Je te conseil de lire les 2-3 tutoriels de développez sur les JTable ... Il te faudra utiliser des TableCellRenderer, et pas directement des JComboBox dans ton modèle ?!

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut
    Salut,

    Ah bon?

    Pourtant sur la javaDoc ils font ça en quelques ligne (cf le dernier bout de code de mon précédent message).

    la je suis en train de lire ça
    http://mbaron.ftp-developpez.com/javase/javavisu.pdf

    ça à l'air tout à fait différent de la doc java.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut
    Justement c'est ce que j'ai fait (à peu près):

    agade :
    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
     
    jTable1=new JTable();
                MonModele model =new MonModele( taxo, onglet, libelle, Contextref);
                jTable1.setModel(model);
                jTable1.createDefaultColumnsFromModel();
                jTable1.getTableHeader().setReorderingAllowed(false);
     
     
                TableColumn cH = jTable1.getColumnModel().getColumn(2);
                JComboBox operateur;
                operateur=new JComboBox();
                operateur.addItem("+");
                operateur.addItem("-");
                TableCellEditor  cellEditorRv0 = new DefaultCellEditor (operateur);
                cH.setCellEditor(cellEditorRv0);
    la pô compris

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    l'éditeur est utilisé quand tu clic sur la cellule, pour simplement afficher il faut utiliser les renderers (de la même façon que l'editor).

    En l'occurrence dans ton cas tu n'auras pas l'utilité des editors vu que tu renvoi false dans isCellEditable ... donc jamais d'édition, jamais d'editors ...

    D'ailleurs ton code pour les fonctions getValueAt et autres me semble plus qu'étrange ... en même temps tout ton modèle est plus qu'étrange ... normalement dans ton vecteur (beurk!) elements tu dois ajouter des Objets contenant les différents éléments, comme compte, actif, ...

    Et getValueAt ressemblerait par exemple à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (columnIndex == 0) return elements.getElementAt(rowIndex).getCompte();
    else if (columnIndex == 1) return elements.getElementAt(rowIndex).getActif();
    // etc ...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Par défaut
    ok, j'ai compris maintenant ça marche!

    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
     
    jTable1=new JTable();
                MonModele model =new MonModele( taxo, onglet, libelle, Contextref);
                jTable1.setModel(model);
                jTable1.createDefaultColumnsFromModel();
                jTable1.getTableHeader().setReorderingAllowed(false);
     
                DefaultTableCellRenderer comboRenderer = new DefaultTableCellRenderer() { 
                    public void setValue(Object value) { 
                          super.setValue(value); 
                    } 
                };
     
                TableColumn cH = jTable1.getColumnModel().getColumn(2);
                JComboBox operateur;
                operateur=new JComboBox();
                operateur.addItem("+");
                operateur.addItem("-");
                TableCellEditor  cellEditorRv0 = new DefaultCellEditor (operateur);
                cH.setCellEditor(cellEditorRv0);
                cH.setCellRenderer(comboRenderer);
    Pour ceux qui galère comme moi, je remet également ce que j'ai mis dans mon tableModel:

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    class MonModele extends AbstractTableModel {
                Vector nomColonne=new Vector(); //les noms de colonnes
                Vector<Vector> donnees=new Vector<Vector>(); //les donnees de la table
                Vector elementUn = new Vector();
     
                public MonModele(String taxo,String onglet,String libelle,String Contextref) {
                    nomColonne.addElement("Compte");
                    nomColonne.addElement("Actif");
                    nomColonne.addElement("Operateur");
                    String StrSQL;
                    StrSQL ="SELECT COMPTE,ACTIF FROM MAPPING WHERE TAXONOMIE='"+taxo+"' AND GABARIT='"+onglet+"' AND ELEMENTNAME='"+libelle+"'  AND CONTEXTREF='"+Contextref+"'";
                    try{
                        Database connect=new Database();
                        connect.OpenDB();
                        ResultSet rs=connect.Execute(StrSQL);
                        //on place le curseur sur le dernier tuple
                        rs.last();
                        //on récupère le numéro de la ligne
                        int nombreLignes = rs.getRow();
                        //on repace le curseur avant la première ligne
                        rs.beforeFirst();
     
                        while (rs.next()){
     
                            elementUn.addElement(rs.getString("COMPTE"));
                            if (rs.getString("ACTIF").equals("Y")){
                                elementUn.addElement(new Boolean(true));
                            }
                            else{
                                elementUn.addElement(new Boolean(false));
                            }
     
                            elementUn.addElement("+");
                        }
                    }
                    catch (Exception E){
                        JOptionPane.showMessageDialog(null, "Impossible de se connecter à cette BD" +
                        "Erreur " + E.getMessage(), "alert", JOptionPane.ERROR_MESSAGE);
                    }
                }
     
                public int getColumnCount() {
                return nomColonne.size();
                 }
     
                 public int getRowCount() {
                  return elementUn.size()/getColumnCount();
                 }
     
                 public String getColumnName(int columnIndex) {
                  String colName="";
                  if (columnIndex<=getColumnCount())
                   colName=(String)nomColonne.elementAt(columnIndex);
                  return colName;
                 }
     
                 public Class getColumnClass(int column){
                    return getValueAt(0, column).getClass();
                 }
     
                 public boolean isCellEditable(int rowIndex, int columnIndex) {
                  return true;
                 }
     
                 public Object getValueAt(int rowIndex, int columnIndex) {
                  return elementUn.elementAt(
                           (rowIndex*getColumnCount())+columnIndex);
                 }
     
                 public void setColumnName(Vector colNames){
                        //columnNames=new Vector(colNames.length);
                        nomColonne=colNames;
                         fireTableStructureChanged();
                }
     
                public void removeRow(int row) {
                    elementUn.removeElementAt(row);
                    fireTableRowsDeleted(row, row);
                }
            }
    Merci pour vos indications!

Discussions similaires

  1. Dérouler JcomboBox dans Jtable
    Par hawax dans le forum Composants
    Réponses: 0
    Dernier message: 30/03/2009, 02h02
  2. Rafraichissement Jcombobox dans jtable
    Par palex dans le forum Composants
    Réponses: 1
    Dernier message: 29/08/2007, 11h52
  3. Réponses: 6
    Dernier message: 20/09/2006, 11h01
  4. supprimer un item d'un jcombobox dans une jtable
    Par bellout dans le forum Composants
    Réponses: 6
    Dernier message: 22/06/2006, 16h06
  5. Vérification de l'etat des JComboBox dans JTable
    Par nicotine002 dans le forum Composants
    Réponses: 5
    Dernier message: 26/01/2006, 11h47

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