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

AWT/Swing Java Discussion :

[JXTable] Afficher CheckBox plutot que true/false


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 64
    Par défaut [JXTable] Afficher CheckBox plutot que true/false
    Bonjour,

    J'utilise une JXTable et j'aimerais qu'une JCheckBox soit affichée plutot que la valeur true ou false.

    Pour cela, j'ai fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    column = m_tableMembre.getColumnModel().getColumn(7);
    column.setCellRenderer(new CheckBoxRenderer());
    Avec la classe CheckBoxRenderer :

    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
     
    public class CheckBoxRenderer extends JCheckBox implements TableCellRenderer {
     
    	public CheckBoxRenderer() {
     
    	}
     
    	/* (non-Javadoc)
    	 * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
    	 */
    	@Override
    	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    		this.setSelected((Boolean) value);
    		return this;
    	}
    }
    Mais malheureusement ça ne focntionne pas.

    Qu'est-ce que j'ai fais de faux ou qu'est-ce qu'il manque ?

    Merci d'avance

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 64
    Par défaut
    En fait j'ai trouvé...

    Je n'aurais pas pensé qu'il fallait juste overridder la méthode getColumnClass du model

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Class<?> getColumnClass(int columnIndex) {
    		return getValueAt(0, columnIndex).getClass();
    	}

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 84
    Par défaut
    Bonsoir,
    Te serait il possible d'expliciter d'avantage ta solution car j'ai besoin de faire la même chose que toi.
    Merci d'avance

  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
    Il te suffit d'utiliser un Model pour ta JTable héritant de DefaultTableModel et redéfinissant la méthode getrColumnClass tel que précisé au dessus

  5. #5
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    un petit exemple :

    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
     
    public class Main
    {
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {                
                    JFrame frame = new JFrame();
                    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     
                    JTable table = new JTable();
                    table.setModel(new DefaultTableModel(new Object[][]{{1, "a", true}, {2, "b", false}},
                                                  new Object[]{"int", "string", "boolean"})
                            );
     
                    table.getColumnModel().getColumn(2).setCellRenderer(new CheckBoxRenderer());
     
                    frame.getContentPane().add(new JScrollPane(table));
     
                    frame.pack();
                    frame.setVisible(true);
                }
            });
        }
     
        private static class CheckBoxRenderer extends JCheckBox implements TableCellRenderer {
     
                public CheckBoxRenderer() {
     
                }
     
                /* (non-Javadoc)
                 * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
                 */
                public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                        this.setSelected((Boolean) value);
                        return this;
                }
        }
    }
    pas besoin d'une surcharge du getColumnClass dans ce cas puisque tu associes le TableCellRenderer directement à la colonne dans le ColumnModel.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 84
    Par défaut
    Merci je vais tester çà !!!

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 84
    Par défaut
    Merci beaucoup !!!
    Sinon une autre question comment peut on définir changer la couleur d'une cellule quand on clique dessus. En fait ce que je veux c'est que par défaut la couleur de la cellule est grise et que lorsque je clique elle devient bleu et lorsque je reclique elle devient grise...
    Voici ce que j'ai fais mais çà ne marche pas

    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
    private static class LabelRenderer extends JLabel implements TableCellRenderer {
     
            public LabelRenderer() {
            	super();
            	this.setName("0");
            	setBackground(Color.BLACK);
            }
     
            /* (non-Javadoc)
             * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)
             */
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            	setOpaque(true); 
     
            	if (isSelected && this.getName()=="0") {
            		if(this.getBackground()==Color.GRAY) {
            			setBackground(Color.BLACK);
            			this.setName("1");
            		}
            		else {
            			setBackground(Color.GRAY);
            			this.setName("0");
            		}
            	}
            	/*else { 
            		setBackground(Color.BLACK);
            	}*/
                    return this;
            }

  8. #8
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    le problème, c'est que ton renderer LabelRenderer va être utilisé pour beaucoup d'autres cellules.
    Il faudrait que tu maintiennes une structure qui indique combien de clicks ont été effectués sur chaque cellule et que tu te bases sur les informations de cette structure pour déterminer la couleur à utiliser (et non pas sur le nom de ton renderer).
    tu alimenterais cette structure lorsque l'utilisateur clique sur la table via un MouseListener sur ta JTable.

  9. #9
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 84
    Par défaut
    Merci !!
    En fait je voudrais obtenir un truc dans ce genre là. Pourrais tu me confirmer que la meilleur solution est un JTable ?

  10. #10
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    bah, en tout cas, c'est plus simple à faire avec une JTable

  11. #11
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 84
    Par défaut
    ok merci ^^

  12. #12
    Invité de passage
    Inscrit en
    Février 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 1
    Par défaut
    Bonjour,
    Est il possible de me proposer une solution pour un probleme pareil, c'est à dire, après avoir pu afficher une case à cocher au lieu de true/false, je ne peux pas cocher ou decocher.
    Merci d'avance.

  13. #13
    Invité de passage
    Inscrit en
    Mai 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 1
    Par défaut clic sur un noeud d'une JXTreeTable
    Bonjour à tous,

    je viens de découvrir le composant JXTreeTable et j'ai besoin qu'un évènement se déclanche au clic sur un noeud, mais je ne sais pas comment faire.
    quelqu'un pourrait-il m'aider ?

    merci d'avance.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/03/2010, 14h16
  2. J'utilise une table JExcelTable qui m'affiche true / false au lieu d'un checkBox
    Par mourmfih dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 06/10/2009, 15h32
  3. afficher la valeur d'une clé étrangère plutot que le nom
    Par titoumimi dans le forum Ruby on Rails
    Réponses: 7
    Dernier message: 12/03/2007, 10h23
  4. Afficher des mots plutot que des nombres
    Par rolan dans le forum Access
    Réponses: 2
    Dernier message: 05/01/2007, 12h37
  5. Afficher des mots plutot que des nombres
    Par rolan dans le forum Access
    Réponses: 3
    Dernier message: 04/01/2007, 23h45

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