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 et checkBox


Sujet :

Composants Java

  1. #1
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Par défaut JTable et checkBox
    Salut à tous

    J'ai un petit problème concernant la mise à jour des checkbox dans une jtable.

    Dans mon table model:
    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
        // déclaration de la colonne
       TableColumn colOk = new TableColumn(8, 50);
        colOk.setCellRenderer(new ReapproCellRenderer());
        colOk.setCellEditor(new ReapproCellEditor());
        colOk.setHeaderValue("Réappro");
        tcm.addColumn(colOk);
     
       // Renderer 
         private class ReapproCellRenderer
          implements TableCellRenderer {
        JCheckBox checkBox = null;
     
        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();
          checkBox.setSelected( ( (Boolean) value).booleanValue());
          checkBox.setHorizontalAlignment(JLabel.CENTER);
          if (isSelected) {
            checkBox.setBackground(new Color(0x99CCFF));
          }
          else {
            checkBox.setBackground(Color.white);
          }
          return checkBox;
        }
      }
     
       // Editor
      private class ReapproCellEditor
          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());
          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;
        }
      }
    Le problème est que la mise à jour des données ne se fait pas lorsqu'on coche ou décoche la checkbox mais seulement lorsqu'on sélectionne une autre ligne de la table. Donc lors du transfert de mes données, la dernière modification n'est pas prise en compte. Comment faire pour forcer la modification des données?

    Merci d'avance

  2. #2
    Membre éprouvé Avatar de jiraiya
    Inscrit en
    Mai 2002
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 100
    Par défaut
    un petit repaint de la table après le changement de la checkbox s'impose

  3. #3
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Par défaut
    Merci pour ta réponse rapide

    J'ai essayé et ca ne fonctionne pas, il ne sauvegarde pas les données à ce moment-là

    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
        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());
        // repaint
          JTable.repaint();
          return field;
        }

  4. #4
    Membre éprouvé Avatar de jiraiya
    Inscrit en
    Mai 2002
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 100
    Par défaut
    euh déjà c'est avec un petit j le jTable.repaint()

    en suite le repaint c'est beaucoup mieux de la faire au niveau de ta fenêtre (endroit ou tu gères les évènement (changement des checkbox))

  5. #5
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Par défaut
    sûrement une mauvaise manoeuvre au moment du copier/coller mais j'ai tester

    Je ne vois pas comment ma frame pourrais savoir quand je modifie ma checkbox puisque celle-ci est implémentée dans le tableModel??

    Je suis en train de tester une autre méthode, redéfinir la méthode getColumnClass dans le tableModel, ca permet de mettre le renderer par défaut en checkbox sans rien implémenter en plus pour les objets Boolean.

    Mais en ce qui concerne le changement des valeurs je ne sais pas si ca fonctionne correctement.

  6. #6
    Membre éprouvé Avatar de jiraiya
    Inscrit en
    Mai 2002
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 100
    Par défaut
    humm enfait je pense que tu n'as pas trop compris le principe du MVC java, en fait, les données (sélection ou non des checkboxes) doit se trouver dans un TableModel

    et en fait ici il ne me semble pas que tu modifies ces valeurs dans le model de ta JTable

  7. #7
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Par défaut
    Je ne pense pas, j'ai des problèmes lors de la sauvegarde des données et non pas lors de l'affichage des données.

    J'ai défini une méthode setValueAt(Object value, int row, int column) ainsi que la méthode isCellEditable et il ne passe pas dans la première méthode. Donc il ne met pas à jour mes données et non ma JTable.

    Pour moi j'ai un prolème avec le model et non la vue, donc je vois pas en quoi un refresh de la table m'aiderait

  8. #8
    Membre expérimenté
    Inscrit en
    Septembre 2003
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 174
    Par défaut
    Salut,
    Je pense que l'ideal serait que tu postes plus de ton code avec un main pour que l'on puisse tester parce que la ca me parait un peu confus.
    sylvain_2020

  9. #9
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Par défaut
    C'est bon j'ai trouvé:

    dans la méthode getTableCellEditorComponent de mon CellEditor je force la mise à jour de ma valeur.

    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
        public Component getTableCellEditorComponent(JTable jTable, Object value,
                                                     boolean isSelected,
                                                     int rowIndex,
                                                     int vColIndex) {
          Syslog.getLogger().info("passe dansgetTableCellEditorComponent");
          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());
         // force le setValueAt
          setValueAt(currentRow, currentColumn, value);
          return field;
        }
    Mes données réelles se mettent correctement à jour maintenant, merci de votre aide même si je n'ai pas été clair dans mes explications.

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

Discussions similaires

  1. setAutoCreateRowSorter JTable avec checkBox
    Par jamespage dans le forum Composants
    Réponses: 1
    Dernier message: 10/10/2008, 16h55
  2. [JTABLE][CHECKBOX] modifier la valeur de la case à cocher
    Par zozolh2 dans le forum Composants
    Réponses: 3
    Dernier message: 03/05/2006, 11h13
  3. [JTable][CheckBox] CheckboxGroup colonne de JTable
    Par syvid dans le forum Composants
    Réponses: 2
    Dernier message: 02/03/2006, 18h43
  4. [JTable] ajouter une colonne de checkbox
    Par nawel dans le forum Composants
    Réponses: 3
    Dernier message: 04/05/2005, 14h07
  5. Réponses: 4
    Dernier message: 09/02/2005, 10h44

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