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 :

Créer une ligne de JCheckBox dans une JTable


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Par défaut Créer une ligne de JCheckBox dans une JTable
    Bonjour,

    Me revoilà avec mes JTables
    Alors tout d'abord merci encore une fois à tous ceux qui m'ont aidé dans mon post précédent et donc je suis de nouveau embêté pour un autre problème.

    Alors voilà, j'ai mes 2 JTables avec la première ligne sur chacune d'elle qui est fixe (en plus du titre), sur toutes les autres lignes j'aurais des informations que je récupère d'une base de données.

    Le souci c'est que sur la première ligne de ma JTable "mobile" (cf. post précédent), je dois mettre des JCheckBox. J'ai essayé en implémentant une classe BooleanCellRenderer qui hérite de DefaultTableCellRenderer.

    Enfin j'ai pas mal bidouillé avec cette classe je vous montre 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
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package test;
     
    import java.awt.Component;
    import javax.swing.JCheckBox;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableCellRenderer;
     
     
     
    public class BooleanCellRenderer extends DefaultTableCellRenderer {
     
        private JCheckBox _checkBox;
     
        public BooleanCellRenderer() {
            super();
     
            _checkBox = new JCheckBox();
        }
     
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
     
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (value.toString().equals(Boolean.toString(Boolean.TRUE))) return _checkBox;
            //if (value.toString() == "false") return _checkBox;
            else return this;
        }
     
    }
    Donc j'ai pas mal bidouillé autour de cette classe mais rien n'y fait, et le problème avec la méthode getColumnClass() dans ma classe héritant de la classe AbstractTableModel c'est justement qu'elle ne prend en compte que les colonnes, or moi je souhaite travailler par ligne.

    En vous remerciant d'avance.

    PS : Lorsque je debug mon appli, cela ne passe même pas dans le code que j'ai implémenté !

  2. #2
    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
    A toi de définir ton propre modèle héritant d'AbstractTableModel et redéfinissant la méthode getColumnClass de façon appropriée.

    De plus ton Renderer va te poser problème, en effet, il ne gère pas le cas où la valeur est false.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Par défaut
    Mais si je redéfini la méthode getColumnClass() le problème c'est que je ne peux pas la redéfinir en y ajoutant des arguments !

    Dans ce cas comment faire pour connaitre l'index de la ligne ?

    J'ai réussi à afficher ma ligne mais le souci c'est que j'étais dans une JTable qui ne comportait qu'une seule ligne, donc je pouvais me permettre de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       @Override
        public Class getColumnClass(int columnIndex){
            return Boolean.class;
        }
    Mais la puisque j'ai plusieurs lignes mon souci vient donc de savoir quel est l'index de la ligne dans cette méthode... C'est pour cela que je pensais modifier le DefaultCellRenderer.

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu peux faire cela au niveau de la JTable, en redéfinissant les méthodes getCellRenderer()/getCellEditor() afin qu'elles te renvoient un renderer/editeur différent pour la première ligne.

    A noter que tu peux également utiliser getDefaultRenderer()/getDefaultEditor() pour récupérer un renderer/editor spécifique pour les booleens :

    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
    String[] names = { "Col 1", "Col 2", "Col 3" };
    Object[][] data = {
            { true,          false,        false },
            { "ligne 1",    "val 1",    "info 1" },
            { "ligne 2",    "val 2",    "info 2" },
            { "ligne 3",    "val 3",    "info 3" },
            { "ligne 4",    "val 4",    "info 4" },
    };
     
    JTable table = new JTable(data, names) {
        public TableCellRenderer getCellRenderer(int row, int column) {
            if (row==0) {
                return getDefaultRenderer(Boolean.class);
            }
            return super.getCellRenderer(row, column);
        }
     
        @Override
        public TableCellEditor getCellEditor(int row, int column) {
            if (row==0) {
                return getDefaultEditor(Boolean.class);
            }
            return super.getCellEditor(row, column);
        }
    };
     
    JOptionPane.showMessageDialog(null, new JScrollPane(table));
    a++

  5. #5
    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
    Ce que tu cherches à faire n'est pas possible en passant par getColumnClass, en effet cette méthode ne gère que les lignes.

    Dans ton cas la méthode la plus propre pour réaliser ça serait de créer une classe héritant de JTable et redéfinissant les méthode getCellRenderer(int row, int col) et getCellEditor(int row, int col) pour qu'elles renvoies un couple Renderer/Editor basé sur une JCheckBox pour la ligne 0 et le couple Renderer/Editor par défaut (super.getCellRenderer/super.getCellEditor), de fait ça te permettra de continuer à utiliser les mécanismes standard pour toutes les autre lignes.

    [edit]Grillé[/edit]

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Par défaut
    MERCi !!!!

    Problem solved !!!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  2. Réponses: 0
    Dernier message: 18/08/2009, 15h49
  3. Réponses: 1
    Dernier message: 06/10/2007, 14h59
  4. Passer une ligne en parametre dans une procedure
    Par schnourf dans le forum Oracle
    Réponses: 5
    Dernier message: 08/06/2006, 15h29
  5. selectionner une ligne au hasard dans une table
    Par dark_vidor dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/06/2005, 12h01

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