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 :

CheckBox dans JTable


Sujet :

Composants Java

  1. #1
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut CheckBox dans JTable
    Bonjour

    Je souhaiterais ajouter des cases à cocher dans mon tableau. Voici mon code:

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package rmi;
     
    /**
     *
     * @author Blaugrana
     */
     
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
     
    import java.sql.*;
    import java.util.Vector;
    import javax.swing.*;
    import javax.swing.table.DefaultTableModel;
     
     
    public class ListeUser extends JDialog {
     
     
     
            private Statement state;
            private ResultSet resultat;
            private ResultSetMetaData resultatMD;
    	private JTable table = null;
     
     
    	private JPanel panotable = null;
    	private JScrollPane js= null;
     
            final Vector columnNames = new Vector();
            final Vector data = new Vector();
     
     
     
        Connection con;
     
    	public ListeUser() throws ClassNotFoundException, SQLException
    	{
    		this.setLayout(null);
    		   this.setTitle("Liste des utilisateurs");
     
                new Connexion().getInstance();
     
     
    		   this.setLocationRelativeTo(this.getParent());
     
     
    		   java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
     
    	       this.pack();
     
    	       this.setLocation(
    	               (screenSize.width-1000)/2,
    	               (screenSize.height-590)/2
    	               );
    	       this.setSize(1000, 620);
     
    	       this.setModal(true);
     
    	       Color  c = new Color(224,255,255);
     
     
                   afficheUser();
     
     
    	       this.setVisible(true);
    	}
     
            public void afficheUser() throws ClassNotFoundException, SQLException
            {
     
     
     state=Connexion.getInstance().createStatement();
     resultat=state.executeQuery("select * from user");
     resultatMD =resultat.getMetaData();
     
     
    int compteur= resultatMD.getColumnCount();
     
    for(int i=1;i<=compteur;i++)
    {
    columnNames.addElement(resultatMD.getColumnName(i));
     
    }
    columnNames.addElement("Check Box");
    while(resultat.next()){
     
       Vector row = new Vector(compteur + 1); 
     
       for(int i=1;i<=compteur;i++)
    {
    row.addElement( resultat.getObject(i) );
    }
       row.addElement(new JCheckBox().isFocusable());
       data.addElement( row ); 
     
    }
     
    table = new JTable(data,columnNames);
     
     
    panotable = new JPanel();
     
    panotable.setBounds(22,300,519,156);
    			panotable.setLayout(new BorderLayout());
    			panotable.setBackground(Color.gray);
     
    		js = new JScrollPane(table);
    		js.setPreferredSize(new Dimension(50,50));
    		panotable.add(js,BorderLayout.CENTER );
     
    		this.setContentPane(panotable);
     
            }
     
     
     
     
     
    }
    Quand j'exécute, au lieu d'avoir des cases à cocher j'ai des "true" qui s'affichent.

    Merci

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Par défaut, une JTable n'affiche que du texte. Pour faire d'autres formes d'affichage, il faut fournir tes propres TableCellRenderer et TableCellEditor.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    table.getColumnModel().getColumn(index).setCellRenderer(....) 
    table.getColumnModel().getColumn(index).setCellEditor(....)
    Plus d'infos sur la page officielle d'oracle:

    http://docs.oracle.com/javase/tutori....html#renderer
    http://docs.oracle.com/javase/tutori...le.html#editor

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Points : 235
    Points
    235
    Par défaut
    tu dois definir ton 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
    package sms;
    import javax.swing.table.AbstractTableModel;
     
    public class MonModele extends AbstractTableModel{
    	private static final long serialVersionUID = 1L;
    	private String[] columnNames={"code","Noms et Prénoms","Numéro","Cocher"};
    	private Object[][] data=null;
    	public MonModele(Object[][] data){
    		this.data=data;
    	}
     
    	public int getColumnCount() {
            return columnNames.length;
        }
     
        public int getRowCount() {
            return data.length;
        }
     
        public String getColumnName(int col) {
            return columnNames[col];
        }
     
        public Object getValueAt(int row, int col) {
            return data[row][col];
        }
     
        public Class<?> getColumnClass(int columnIndex) {
        	if (columnIndex == 3) return Boolean.class;
        	else return String.class;
        }
     
        public boolean isCellEditable(int row, int col) {
            return col==3?true:false;
        }
        public void setValueAt(Object aValue, int row, int col) {
            if ( aValue instanceof Boolean) data[row][col]=(Boolean)aValue;
        }
    }
    et l'appliquer à ta table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		MonModele modele=new MonModele(data2);
    		table=new JTable(modele);
    La force d'un programmeur ne réside pas dans le fait qu'il écrive des codes puissants mais dans sa capacité à les maintenir!!!

  4. #4
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Ok j'ai essayé ce que tu m'as proposé mais le souci c"est que data2 est de type Vector:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonModel model = new MonModel(data2);
    J'ai essayé de convertir data2 en Object[][] mais la conversion d'un vector en un tableau à 2 dimensions est compliquée. J'ai cherché mais j'ai pas trouvé comment faire.

    Merci

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ton Vector contient quoi? C'est un Vector<Object[]> ?

  6. #6
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Voici un bout de code qui montre ce que contient mon vector:

    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
    public void afficheUser() throws ClassNotFoundException
            {
                try {
                    try {
                        state=Connexion.getInstance().createStatement();
                    } catch (SQLException ex) {
                        JOptionPane.showMessageDialog(null,"Erreur lors de la création de l'objet Statement!");
                    }             
               
                    resultat=state.executeQuery("select * from user");
                    ResultSetMetaData       resultatMD =resultat.getMetaData();
                    
         Vector data = new Vector();              
                   
    int compteur= resultatMD.getColumnCount();
     
    for(int i=1;i<=compteur;i++)
    {
    columnNames.addElement(resultatMD.getColumnName(i));
     
    }
    columnNames.addElement("Check Box");
    while(resultat.next()){
     
       Vector row = new Vector(compteur + 1); 
     
       for(int i=1;i<=compteur;i++)
    {
    row.addElement( resultat.getObject(i) );
    }
       row.addElement(new JCheckBox());
       data.addElement( row ); 
     
    }
    
    
    MonModel model = new MonModel(data);
    table = new JTable(model);

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ok, donc c'est un Vector<Vector<Object>>. Le plus simple c'est que tu change la signature de ton constructeur de model pour prendre cette structure et que tu change le code de getValueAt pour utiliser ça plutot que le Object[][]. Rien de bien compliqué en somme.

  8. #8
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    J'ai changé data en Vector dans la Class MonModel, du coup la méthode getValueAt et setValueAt causent problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public Object getValueAt(int row, int col) {
            return data[row][col];
        }
     
    public void setValueAt(Object aValue, int row, int col) {
            if ( aValue instanceof Boolean) data[row][col]=(Boolean)aValue;
        }
    J'ai pas pu trouver l'équivalent de data[row][col] pour les Vecteurs.

    Merci

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Il y a une méthode .get sur la classe vectore pour accéder à son contenu.

  10. #10
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Oui mais cette méthode ne prend qu'un seul paramètre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data.get(col); ou data.get(row);
    Y'a t'il un moyen d'insérer les 2 paramètres avec la méthode get?

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    heu, réfléchis un peu à

    Comment tu as organisé tes Vector à la sorte de ta connexion base de données
    Comment, d'une manière générale, tu comptais accéder au contenu ainsi stocké.

    Indice, tu as, je le rappelle, créé un Vector par row, et mis tous ces row dans un autre vector data

Discussions similaires

  1. Problème CheckBox dans JTable
    Par l4r3nZu dans le forum Composants
    Réponses: 2
    Dernier message: 28/05/2011, 14h02
  2. Valeur Checkbox dans JTable
    Par fred33 dans le forum Débuter
    Réponses: 1
    Dernier message: 26/07/2010, 09h47
  3. Réponses: 11
    Dernier message: 26/12/2009, 17h29
  4. Checkbox dans un JTable
    Par Spinoza23 dans le forum AWT/Swing
    Réponses: 12
    Dernier message: 19/01/2007, 14h21
  5. checkbox dans un JTable
    Par hbzied dans le forum Composants
    Réponses: 2
    Dernier message: 17/05/2006, 17h52

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