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 :

probleme table et checkbox sans utiliser setCellEditor


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 84
    Par défaut probleme table et checkbox sans utiliser setCellEditor
    Bonjour, aprés avoir regardé un peu partout sur le net, je me tourne vers vous car je ne trouve pas la solution à mon problème.

    voici la fonction que j'ai écrite. Elle initilaise un tableau avec une checkbox dans la premiere case et une description dans la seconde

    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
     
    /**
             * Créer et initialise le tableau resultat
             * chaque ligne sera composé d'une boite à coché et d'une description sommaire du poste
             * @param result les resultats de la requete
             * @param duree la durée d'un stage
             * @param panelPrincipal le panel auquel il faut ajouter le tableau
             */
    	private void initTableResult(ResultSet result, String duree, JPanel panelPrincipal) {
    		// TODO Auto-generated method stub
    		//on créé un nouveau panel qui contiendra une checkbox et le tableau
    		JPanel pTableau = new JPanel(new GridLayout(2,0));
     
    		//calcul du nombre de resultat pour definir le nombre de ligne
    		int NbrResult = 0;
    		try {
    			//on ce positionne à la derniere ligne
    			result.last();
    			NbrResult = result.getRow();
     
    			//on ce remet avant la premiere ligne
    			result.beforeFirst();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    		//attribut de la table
    		String[] columName = {"Selectioner","Descriptoin"};
    		Object [][] data = new Object[NbrResult][2];
     
    		//vecteur de checkbox pour pouvoir y acceder ulterieurement
    		final Vector<JCheckBox> vCheck = new Vector<JCheckBox>();
     
    		//la premier checkbox sert à selectioner toutes les autres.
    		final JCheckBox totalcheck = new JCheckBox("Tout selectionner");
     
    		//on lui met un action listener
    		totalcheck.addActionListener(new ActionListener(){
     
    			@Override
    			public void actionPerformed(ActionEvent arg0) {
    				// TODO Auto-generated method stub
    				//si on coche la checkbox on coche toutes les autres
    				if(totalcheck.isSelected())
    					for(int i = 0;i < vCheck.size();++i)
    						vCheck.get(i).setSelected(true);
    				//sinon on les decoches
    				if (!totalcheck.isSelected())
    					for(int i = 0;i < vCheck.size();++i)
    						vCheck.get(i).setSelected(false);
     
    			}//action performed
     
    		});//actionlistener
    		//on met les bonne couleur a la checkbox
    		totalcheck.setBackground(Color.white);
    		totalcheck.setForeground(Color.blue);
    		//on ajoute la checkbox
     
    		//boucle de remplissage du tableau
    		pTableau.add(totalcheck);
     
    		//pour calculer le nbr de jour entre 2 dates
    		long MILLISECONDE_PER_DAY = 1000 * 60 * 60 * 24;
    		try {
    			int row = 0;//compteur de ligne
    			while(result.next()){
    				//avant d'ajouter un poste on verifie si la duréé correspond
    				//si la durée n'est pas nulle on la met sous forme d'entier
    				long dureelong = 0;
    				if (!(duree == null)){
    					for(int i = 0; i < duree.length(); ++i)
    						dureelong = dureelong*10 + (duree.charAt(i) - '0');
    				//on extrait les dates de debut et fin
    				Date datedeb = result.getDate(12);
    				Date datefin = result.getDate(13);
     
    				long diff = datefin.getTime() - datedeb.getTime();
    				long dureeStageDay = diff/MILLISECONDE_PER_DAY;
     
    				//si la durée de stage ne correspond pas on ne met pas le resultat
    				if (dureelong != dureeStageDay)continue;
    				}
     
    				//création d'une checkbox
    				JCheckBox check = new JCheckBox();
     
    				//on met une check box dans la premiere colonne
    				data[row][0] = check;
    				vCheck.add(check);
     
    				//recherche des noms de commune
    				//ouverture d'une connection
    				ConnectionAcess conn = new ConnectionAcess();
    				Statement stm = conn.conn.createStatement();
    				ResultSet comm = stm.executeQuery("select NomCommune into Commune where CodePostal = '" + result.getString(4) + "';");
    				//dans la deuxieme colonne on met les infos interessantes
    				data[row][1] =  "Poste : "+ result.getString(9) +
    						" Secteur : "+ result.getString(3)
    						+ " Commune : "+ comm.getString(1)
    						+ "Date : du " + result.getString(12) + " au " + result.getString(13);
     
    			}//boucle remplissage
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		//création de la table
    		JTable tableResult = new JTable(data,columName);
     
    		JScrollPane scroll = new JScrollPane(tableResult);
    		scroll.setSize(20,20);
    		scroll.setAutoscrolls(true);
     
    		//on ajoute le tableau au panel
    		pTableau.add(scroll);
     
    		//ajout à la fenetre
    		panelPrincipal.add(pTableau);
     
     
     
    	}
    Mon soucie est que si j'utilise comme le suggère la plus part des solutions que j'ai lus les lignes de code qui suivent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TableColumn col= tableResult.getColumnModel().getColumn(0);
     col.setCellEditor(new DefaultCellEditor(new JCheckBox()));
    j'ai 2 problème. Le premier c'est qu'il y a écrit true dans la premiere colonne au lieu d'avoir une checkbox et le second c'est que la check box qui me sert à cocher toutes les autres ne sert plus a rien.

    3eme problème, avec le code actuel rien ne s'affiche dans mon tableau j'ai des lignes vides.

    merci

    Ogtraba

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 84
    Par défaut
    bon j'ai trouvé ce lien

    http://www.developpez.net/forums/d31...able-checkbox/

    Maintenant la check box apparait mais pas la description à côté. Par contre la checkbox qui me permet de toutes les selectionner ne fonctionne pas.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 84
    Par défaut
    bien je vais mettre tout le code que j'utilise et si quelqu'un veux bien me répondre ce serai super

    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
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
     
    /**
     * 
     */
    package fenetres;
     
    import java.awt.Checkbox;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.GraphicsConfiguration;
    import java.awt.GridLayout;
    import java.awt.HeadlessException;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.sql.Date;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.EventObject;
    import java.util.Vector;
     
    import javax.swing.AbstractCellEditor;
    import javax.swing.DefaultCellEditor;
    import javax.swing.JCheckBox;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableColumn;
     
    import connection.ConnectionAcess;
     
    /**
     * @author STUDENT
     *
     */
    public class FenetreResultat extends AbstractFenetre {	
     
    	/**
             * @throws HeadlessException
             */
    	public FenetreResultat() throws HeadlessException {
    		// TODO Auto-generated constructor stub
    	}
     
    	/**
             * @param arg0
             */
    	public FenetreResultat(GraphicsConfiguration arg0) {
    		super(arg0);
    		// TODO Auto-generated constructor stub
    	}
     
    	/**
             * @param arg0
             * @throws HeadlessException
             */
    	public FenetreResultat(ResultSet result,String duree) throws HeadlessException {
    		super();
    		// TODO Auto-generated constructor stub
    		initialisation(result,duree);
    	}
     
    	/**
             * @param arg0
             * @param arg1
             */
    	public FenetreResultat(String arg0, GraphicsConfiguration arg1) {
    		super(arg0, arg1);
    		// TODO Auto-generated constructor stub
    	}
     
     
    	void initialisation(ResultSet result,String duree){
    		//creation du panel principal
    		JPanel panelPrincipal = new JPanel(new GridLayout(3,0));
    		panelPrincipal.setBackground(Color.white);
    		setContentPane(panelPrincipal);
     
     
    		//on remplie le tableau resultat
    		initTableResult(result,duree,panelPrincipal);
     
    		//on met les caract
    		super.initialisation();
    	}//initialise
     
    	/**
             * Créer et initialise le tableau resultat
             * chaque ligne sera composé d'une boite à coché et d'une description sommaire du poste
             * @param result les resultat de la requete
             * @param duree la duréé d'un stage
             * @param panelPrincipal le panel auquel il faut ajouter le tableau
             */
    	private void initTableResult(ResultSet result, String duree, final JPanel panelPrincipal) {
    		// TODO Auto-generated method stub
    		//on créé un nouveau panel qui contiendra une checkbox et le tableau
    		JPanel pTableau = new JPanel(new GridLayout(2,0));
     
    		//calcul du nombre de resultat pour definir le nombre de ligne
    		int NbrResult = 0;
    		try {
    			//on ce positionne à la derniere ligne
    			result.last();
    			NbrResult = result.getRow();
     
    			//on ce remet avant la premiere ligne
    			result.beforeFirst();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    		//attribut de la table
    		String[] columName = {"Selectioner","Description"};
    		Object [][] data = new Object[NbrResult][2];
     
    		//la premier checkbox sert à selectioner toutes les autres.
    		final JCheckBox totalcheck = new JCheckBox("Tout selectioner");
     
    		//on lui met un action listener
    		totalcheck.addActionListener(new ActionListener(){
     
    			@Override
    			public void actionPerformed(ActionEvent arg0) {
    				// TODO Auto-generated method stub
    				//si on coche la checkbox on coche toutes les autres
    				if(totalcheck.isSelected())
    					for(int i = 0;i < vCheck.size();++i){
    						vCheck.get(i).setSelected(true);
    					}
    				//sinon on les decoches
    				if (!totalcheck.isSelected())
    					for(int i = 0;i < vCheck.size();++i)
    						vCheck.get(i).setSelected(false);
     
    			}//action performed
     
    		});//actionlistener
    		//on met les bonne couleur a la checkbox
    		totalcheck.setBackground(Color.white);
    		totalcheck.setForeground(Color.blue);
     
    		//on ajoute la checkbox
     
    		pTableau.add(totalcheck);
     
    		//pour calculer le nbr de jour entre 2 dates
    		long MILLISECONDE_PER_DAY = 1000 * 60 * 60 * 24;
    		try {
    			int row = 0;//compteur de ligne
    			//boucle de remplissage du tableau
    			while(result.next()){
    				//avant d'ajouter un poste on verifie si la duréé correspond
    				//si la durée n'est pas nulle on la met sous forme d'entier
    				long dureelong = 0;
    				if (!(duree == null)){
    					for(int i = 0; i < duree.length(); ++i)
    						dureelong = dureelong*10 + (duree.charAt(i) - '0');
    				//on extrait les dates de debut et fin
    				Date datedeb = result.getDate(12);
    				Date datefin = result.getDate(13);
     
    				long diff = datefin.getTime() - datedeb.getTime();
    				long dureeStageDay = diff/MILLISECONDE_PER_DAY;
     
    				//si la durée de stage ne correspond pas on ne met pas le resultat
    				if (dureelong != dureeStageDay)continue;
    				}
     
     
    				//recherche des noms de commune
    				//ouverture d'une connection
    				ConnectionAcess conn = new ConnectionAcess();
    				Statement stm = conn.conn.createStatement();
    				ResultSet comm = stm.executeQuery("select NomCommune into Commune where CodePostal = '" + result.getString(4) + "';");
     
    				//dans la deuxieme colonne on met les infos interessantes
    				data[row][1] =  "Poste : "+ result.getString(9) +
    						" Secteur : "+ result.getString(3)
    						+ " Commune : "+ comm.getString(1)
    						+ "Date : du " + result.getString(12) + " au " + result.getString(13);
     
    			}//boucle remplissage
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		//création de la table
    		JTable tableResult = new JTable(data,columName);
    		TableColumn col = tableResult.getColumnModel().getColumn(0);
    		col.setCellEditor(new MonCellEditor());
    		col.setCellRenderer(new MonCellRenderer());
     
    		JScrollPane scroll = new JScrollPane(tableResult);
    		scroll.setSize(20,20);
    		scroll.setAutoscrolls(true);
     
    		//on ajoute le tableau au panel
    		pTableau.add(scroll);
     
    		//ajout à la fenetre
    		panelPrincipal.add(pTableau);
     
    	}
     
     
     
     
    // Renderer 
      class MonCellRenderer
       implements TableCellRenderer {
     
     
     public Component getTableCellRendererComponent(JTable table,
         Object value, boolean isSelected, boolean hasFocus, int row
         , int column) {
       //Create a panel and add the check box to it.
       JCheckBox checkBox = new JCheckBox();
     
       vCheck.add(checkBox);
     
       //checkBox.setSelected( ( (Boolean) value).booleanValue());
       checkBox.setSelected(isSelected);
       checkBox.setHorizontalAlignment(JLabel.CENTER);
       if (isSelected) {
         checkBox.setBackground(new Color(0x99CCFF));
       }
       else {
         checkBox.setBackground(Color.white);
       }
       return checkBox;
     }
    }
     
    // Editor
      class MonCellEditor
       extends AbstractCellEditor
       implements TableCellEditor {
     
     JCheckBox field = new JCheckBox();
     int currentRow;
     int currentColumn;
     
     public Object getCellEditorValue() {
       //setValueAt(currentRow, currentColumn, new Boolean(field.isSelected()));
       return new Boolean(field.isSelected());
     }
     
     
     
     
    public Component getTableCellEditorComponent(JTable jTable, Object value,
                                                  boolean isSelected,
                                                  int rowIndex,
                                                  int vColIndex) {
       currentRow = rowIndex;
       currentColumn = vColIndex;
       field.setHorizontalAlignment(JLabel.CENTER);
       if (isSelected) {
         field.setBackground(new Color(0x99CCFF));
       }
       else {
         field.setBackground(Color.white);
       }
       //field.setSelected(((Boolean) value).booleanValue());
       field.setSelected(isSelected);
       return field;
     }
     
     public boolean isCellEditable(EventObject evt) {
       if (evt instanceof MouseEvent) {
         int clickCount;
         // For single-click activation
         clickCount = 1;
         return ( (MouseEvent) evt).getClickCount() >= clickCount;
       }
       return true;
     }
    }
     
    }//FenetreConsultation

    Je vais essayer d'être clair dans mes problèmes. Tout ce que je veux faire, c'est afficher dans un tableau les resultats d'une requete avec dans la premiere case une checkbox et dans la seconde un certain nombre d'informations.

    Je suis vraiment désespéré car plus je lis des solutions sur internet et plus j'en essaye, moins ça marche.

    Au pire si mon code est vraiment tout faux quelqu'un peut il me mettre un bout de code pour que je puisse avancer.

    merci

    Ogtraba

Discussions similaires

  1. Probleme requete sans utiliser GROUP BY
    Par wild133 dans le forum Débuter
    Réponses: 5
    Dernier message: 12/01/2015, 14h26
  2. Réponses: 1
    Dernier message: 05/02/2014, 21h12
  3. [MySQL] Probleme supression de données en utilisant une checkBox
    Par Eausport dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 07/02/2012, 12h47
  4. Multiplication de table/matrices : sans utiliser IML
    Par dachboden dans le forum Débutez
    Réponses: 5
    Dernier message: 17/05/2011, 10h40
  5. table ordonnée sans utilisation d'une proc sort
    Par nostress dans le forum Macro
    Réponses: 6
    Dernier message: 26/05/2009, 09h29

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