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 :

[JTable] Créer une jTable avec une colonne de checkBox dedans


Sujet :

Composants Java

  1. #1
    Membre confirmé Avatar de anitshka
    Inscrit en
    Mai 2004
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 624
    Points : 605
    Points
    605
    Par défaut [JTable] Créer une jTable avec une colonne de checkBox dedans
    bonjour,
    j'ai vu quelques posts traitant de ce sujet mais je ne m'en sort toujours pas.
    je suis en train de développer une application avec une base de données associée...
    je voudrais afficher une colonne de données (stockée dans un vecteur) et une colonne avec des jCheckBox.
    Pourriez vous m'aider pour la partie jcheckbox que je n'arrive pas à faire...

    Autre question quelle est la différence entre TableCellRendrer et les TableCellEditor ?
    un ptit bout de code serait le bienvenue
    merci d'avance
    Ni Dieu, ni maître, mais des frites bordel!

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2003
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 174
    Points : 194
    Points
    194
    Par défaut Re: [swing]creer une jTable avec une colonne de checkBox ded
    Salut,
    Les checkbox s'affichent toutes seules si tu implementes la methode getColumnClass(int col) de ton model.
    Un petit exemple de 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
    public class MyFrame extends JFrame{
     
    	public static void main(String[] args) {
    		MyFrame frame = new MyFrame();
    	}
     
    	public MyFrame(){
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JScrollPane scrollPane = new JScrollPane(new JTable(new MyModel()));
    		getContentPane().add(scrollPane);
    		pack();
    		show();
    	}
     
    	class MyModel extends AbstractTableModel{
    		private Object[][] data = new Object[][]{{new Boolean(true), new Boolean(false),new Boolean(true)}};
    		private String[] colNames = new String[]{"un","deux","trois"};
    		private Class[] colClass = new Class[]{Boolean.class,Boolean.class,Boolean.class};
     
    		public MyModel(){
    			super();
    		}
     
    		public int getColumnCount() {
    			return colNames.length;
    		}
     
    		public int getRowCount() {
    			return data.length;
    		}
     
    		public Object getValueAt(int arg0, int arg1) {
    			return data[arg0][arg1];
    		}
     
    		public boolean isCellEditable(int arg0, int arg1) {
    			return true;
    		}
     
    		public Class getColumnClass(int arg0) {
    			return colClass[arg0];
    		}
     
    	}//:-
     
    }///:-
    Autre question quelle est la différence entre TableCellRendrer et les TableCellEditor ?
    Un TableCellRenderer est le composant utilise lorsque tu affiche les donnees alors que le TableCellEditor est le composant utilise lorsque tu edites les cellules.
    Par exemple, tu peux avoir une JTable qui n'affiche que du texte (le TableCellRenderer peut etre un JTextField ou autre chose) et au moment ou tu edites une cellule apparait une JCombobox (un TableCellEditor) pour choisir un valeur parmi une liste de valeur.

    En esperant t'avoir eclaire un peu ... sinon et bien pose des questions
    sylvain_2020

  3. #3
    Membre confirmé Avatar de anitshka
    Inscrit en
    Mai 2004
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 624
    Points : 605
    Points
    605
    Par défaut
    salut
    j'avais déja vu ce code la dans mes recherches mais je n'ai pas reussi a l'adapter pour un apport des données via un vecteur...
    et puis je n'arrive pas ensuite a gerer l'évenement du click sur la checkBox (il ne se coche pas)
    De plus si je veux ensuite ajouter une ligne a ce moment la je devrais changer le modele ? ? ?
    Ni Dieu, ni maître, mais des frites bordel!

  4. #4
    Membre habitué
    Inscrit en
    Septembre 2003
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 174
    Points : 194
    Points
    194
    Par défaut
    Salut,
    Si tu veux qu'un JTable soit editable, il faut que tu implementes la methode setValutAt() du model pour que les changements soient pris en compte.
    Si tu veux ajouter une ligne, il faut que tu ajoutes une methode qui ajoute un element au Vector data.
    Voici un exemple de code qui fait ce que tu veux avec un 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
    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
    public class MyFrame extends JFrame{
     
    	JTable table = new JTable(new MyModel());
    	JButton button = new JButton("Ajouter une ligne");
     
    	public static void main(String[] args) {
    		MyFrame frame = new MyFrame();
    	}
     
    	public MyFrame(){
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JScrollPane scrollPane = new JScrollPane(table);
    		getContentPane().setLayout(new BorderLayout());
    		getContentPane().add(scrollPane,BorderLayout.CENTER);
    		getContentPane().add(button,BorderLayout.NORTH);
     
    		button.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent arg0) {
    				((MyModel)table.getModel()).addRow();				
    			}});
     
    		pack();
    		show();
    	}
     
    	class MyModel extends AbstractTableModel{
    		private Vector data;
    		private String[] colNames = new String[]{"un","deux","trois"};
    		private Class[] colClass = new Class[]{Boolean.class,Boolean.class,Boolean.class};
     
    		public MyModel(){
    			super();
    			data = new Vector();
    			data.add(new Object[] {new Boolean(true), new Boolean(true),new Boolean(true)});
    			data.add(new Object[] {new Boolean(false), new Boolean(false),new Boolean(false)});
    		}
     
    		public int getColumnCount() {
    			return colNames.length;
    		}
     
    		public int getRowCount() {
    			return data.size();
    		}
     
    		public Object getValueAt(int row, int col) {
    			Object[] obj = (Object[]) data.get(row);
    			return obj[col];
    		}
    		public void setValueAt(Object val, int row, int col) {
    			Object[] obj = (Object[]) data.get(row);
    			obj[col] = val;
    		}
     
    		public boolean isCellEditable(int arg0, int arg1) {
    			return true;
    		}
     
    		public Class getColumnClass(int arg0) {
    			return colClass[arg0];
    		}
    		/* Pour ajouter une ligne au Model */
    		public void addRow(){
    			data.add(new Object[] {new Boolean(true), new Boolean(true),new Boolean(true)});
    			/* Pour que le changement dans les donnees soit pris en compte */
    			fireTableDataChanged(); 
    		}
    	}//:-
    }///:-
    Avec ca, tu devrais avoir les idees un peu plus claires ... sinon pose des questions et le code qui te fait bloquer.
    sylvain_2020

  5. #5
    Membre confirmé Avatar de anitshka
    Inscrit en
    Mai 2004
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 624
    Points : 605
    Points
    605
    Par défaut
    merci sylvain_2020
    c'est bon je commence a me debrouiller même si ce n'est pas encore aussi clair que de l'eau de roche
    en tout cas merci c'est sympa de voir que ce forum est toujours aussi efficace
    Ni Dieu, ni maître, mais des frites bordel!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. JScroll avec une classe étendant une JTable
    Par begre1929 dans le forum Composants
    Réponses: 4
    Dernier message: 22/12/2012, 18h41
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  5. Réponses: 1
    Dernier message: 19/02/2007, 16h58

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