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] afficher des Chekbox pour des valeurs booléennes


Sujet :

Composants Java

  1. #1
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut [JTable] afficher des Chekbox pour des valeurs booléennes
    Bonjour,

    J'ai fait un tableau avec une colonne qui contient des valeurs boolean pour qu'il affiche des checkbox, Je voudrais savoir s'il était possible de ne pas afficher de checkbox sur toutes les lignes.
    Certaines de mes lignes sont des lignes de totaux donc je ne veux pas que sur ces lignes la il y ait un checkbox. J'ai essayé la valeur null, mais il m'affiche comme même un checkbox.

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    il faut chercher du cote : CellRenderer.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2007
    Messages : 37
    Points : 42
    Points
    42
    Par défaut
    Si vous pouver nous donner + de details (un peut du code si possible)

  4. #4
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Du code du code!!!!!
    Je pense pas que ca puisse aider!!!

    Je reformule mon problème.

    J'ai une table, dans ma table j'ai une colonne dans laquelle je mets des valeurs booléenne donc avec la méthode "Class getColumnClass(int col)" il me met des cases à cocher pour toutes les valeurs booléenne, pour l'instant rien d'exceptionnel. (Si vous n'êtes pas au courant aller jeter un coup d'oeil sur la doc java).

    Ce que je voudrais c'est que sur certaines lignes je puisse ne pas afficher ces checkbox parce que j'ai fait des lignes intermédiaires pour des totaux.

    Donc ma question est comment je peux faire pour que certaines lignes aient le checkbox mais pas d'autres.

    Ma question n'est pas comment mettre des checkbox je sais déjà faire.

    J'ai déjà essayer avec le setValueAt si la ligne et une ligne de total ne rien afficher... mais ca ne change rien.

    [EDIT]Quand tu dis
    Citation Envoyé par eclesia
    il faut chercher du cote : CellRenderer.
    j'espère que tu ne me suggère pas de réécritre un cellrenderer qui affiche une case à cocher vide si la valeur est false une case à coché pleine si c'est true et rien si null????
    [/EDIT]

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2007
    Messages : 37
    Points : 42
    Points
    42
    Par défaut
    Je vois deux solutions(peut etre)
    1)creer une class extends JTable et redifiner la methode getColumnClass et utilise ta class au lieu de JTable.
    2)ou bien tu n'ajoute pas ta table directement dans l'affichage mais lis les données de ta tables pour les afficher par une autre methode

    j'hespère que ça va marcher

  6. #6
    Membre éprouvé
    Avatar de n!co
    Profil pro
    Inscrit en
    Février 2004
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Points : 936
    Points
    936
    Par défaut
    Citation Envoyé par bilal_inf
    Je vois deux solutions(peut etre)
    1)creer une class extends JTable et redifiner la methode getColumnClass et utilise ta class au lieu de JTable.
    Ce n'est pas JTable qui faut etendre, mais DefaultTableModel !
    Par contre getColumnClass ne prennant en parametre que l'index de la column, il n'est pas possible d'intervenir sur une ligne distinct de la colonne

    Citation Envoyé par bilal_inf
    2)ou bien tu n'ajoute pas ta table directement dans l'affichage mais lis les données de ta tables pour les afficher par une autre methode

    j'hespère que ça va marcher
    C'est pas une solution ca

    En redéfinissant getTableCellRendererComponent de la class DefaultTableCellRendered, tu vas pouvoir, suivant la condition que tu veux appliquer sur ta ligne, soit appeler la méthode standard et récupérer une checkbox, soit retourner un label vide (ou le composant par defaut, je ne sais pas ce que c'est)

    n!co

  7. #7
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par n!co
    C'est pas une solution ca
    oui mais faut bien lire il a dit :
    Citation Envoyé par bilal_inf
    Je vois deux solutions (peut etre)
    C'est le (peut etre) qui est important!!!

    En tout cas Merci pour les réponses je vais voir pour le DefaultTableCellRendered en espérant que ça ne me prenne pas deux semaines à faire..... Je posterai la réponse si je la trouve !!!

  8. #8
    Membre éprouvé
    Avatar de n!co
    Profil pro
    Inscrit en
    Février 2004
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Points : 936
    Points
    936
    Par défaut
    Citation Envoyé par grabriel
    C'est le (peut etre) qui est important!!!
    Et moi le qui était important

    Bon courage

  9. #9
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Yep!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Remise_en_banque_CellRenderer extends JLabel implements TableCellRenderer {
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
            return this;
        }
    J'ai fait ca, mais ca ne m'affiche plus rien dans mes cellules ???? quand je clique sur les cellules avec un checkbox il apparait, se coche et se décoche mais dès que ma souris ne clique plus, plus rien. Par contre c'est cool pour mes lignes de total y'a rien qui apparait même en cliquant sur les cellules.
    Sachant que j'ai les valeurs true et false sur mes lignes normales et null pour les lignes de total.
    J'ai pas trouvé pour n'appliquer le cellrenderer que pour certaines lignes, vu qu'il s'applique à toutes. et je ne vois pas non plus comment lui dire de "ne rien faire" par exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Remise_en_banque_CellRenderer extends JLabel implements TableCellRenderer {
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
    if (value != null)//pour les lignes qui ne sont pas des totaux
     Affiche le checkbox
     
            return this;
        }
    C'est le affiche le checkbox que je ne vois pas comment faire par rapport au component retourné....

  10. #10
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Je crois que tu fais fausse route. Commence plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Remise_en_banque_CellRenderer extends DefaultTableCellRenderer {
     
      public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
        // si c'est une case normale, on renvoie le renderer par défaut
        if(rowIndex != specialRowIndex)
          return super.getTableCellRendererComponent();
     
        // là tu construis un composant qui va représenter la cellule dans ta ligne spéciale
        // et tu le renvoies.
      }
    }

  11. #11
    Membre éprouvé
    Avatar de n!co
    Profil pro
    Inscrit en
    Février 2004
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Points : 936
    Points
    936
    Par défaut
    J'ajouterais que tu peux piquer le render interne de la JTable pour ta checkbox :
    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
    static class BooleanRenderer extends JCheckBox implements TableCellRenderer, UIResource
        {
            private static final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
     
    	public BooleanRenderer() {
    	    super();
    	    setHorizontalAlignment(JLabel.CENTER);
                setBorderPainted(true);
    	}
     
            public Component getTableCellRendererComponent(JTable table, Object value,
    						       boolean isSelected, boolean hasFocus, int row, int column) {
    	    if (isSelected) {
    	        setForeground(table.getSelectionForeground());
    	        super.setBackground(table.getSelectionBackground());
    	    }
    	    else {
    	        setForeground(table.getForeground());
    	        setBackground(table.getBackground());
    	    }
                setSelected((value != null && ((Boolean)value).booleanValue()));
     
                if (hasFocus) {
                    setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
                } else {
                    setBorder(noFocusBorder);
                }
     
                return this;
            }
        }
    Et pour eviter de pouvoir éditer une cellule avec une case vide ( celle ou tu affiche le label plutot que la checkbox), c'est dans la méthode isCellEditable() de la classe DefautTableModel qu'il faut que tu le définisses

  12. #12
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Super cool Merci t'es un !!!



    (je t'aime)

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

Discussions similaires

  1. Compléter des lignes pour des valeurs inexistantes
    Par patgabjoe dans le forum SQL
    Réponses: 5
    Dernier message: 20/11/2012, 09h06
  2. Des problèmes pour ajouter valeur dans une ArrayList
    Par Fused dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/11/2008, 16h28
  3. [JTable] afficher et interragir avec des URLs
    Par jean_bobi dans le forum Composants
    Réponses: 1
    Dernier message: 28/09/2006, 10h35
  4. Valeur pour des checkbox et des boutons radio pour MySQL
    Par mounirha dans le forum Administration
    Réponses: 1
    Dernier message: 18/04/2006, 23h54
  5. [CR] Générer des espaces pour une valeur champ
    Par newpress dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/02/2005, 17h43

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