Partage
  • Partager sur Facebook
  • Partager sur Twitter

JCheckBox dans JTable

gestion d'evenements

    18 juillet 2011 à 0:59:35

    boujour
    j'ai un probleme dans mon JTable : les donnees(int) que je charge dans la table, je l'ai transformé en JCheckBox (case a cocher), la premiere fois ils etaient comme desactivé(juste a regarder) j'ai essayé avec defaultcellEditor pour gerer l'evenements (cocher ou decocher) faite par l'utilisateur mais j'ai pas reussi
    j'aimerai avoir votre aide detaillé si vous permettez
    le but c'est convertir les int en des cases a cocher et lorsque une case est coché une autre table va etre charge par des informations correspondant a ce numero et vis versa
    • Partager sur Facebook
    • Partager sur Twitter
      18 juillet 2011 à 9:41:04

      Je pense que tu puisses convertir des int. Tu peux convertir des boolean seulement à mon avis.

      Sinon, pour faire ce que tu veux, il faut sous-classer JCheckBox, et tu rajoutes un listener dans le constructeur. Ensuite, il faut effectivement personnaliser le CellEditor pour qu'il renvoie bien ta sous-classe de JCheckBox !
      • Partager sur Facebook
      • Partager sur Twitter
        18 juillet 2011 à 10:51:30

        j'ai essayer un peu comme ca mais ca pas bien marché
        un peu de code si ca ne te derange pas
        • Partager sur Facebook
        • Partager sur Twitter
          19 juillet 2011 à 15:15:41

          Pourquoi s'embêter à rajouter un listener dans le constructeur ?

          Traitement de mon tableau qui est dans le constructeur :
          m_champsVal est un tableau de booléen me permettant de récupérer les états des checkBox.
          Les checkBox sont présentes dans la colonne "1" de mon tableau.
          getValueAt a été redéfinit dans mon modèle de tableau.
          private JTable m_tableau;
          
          .
          .
          .
          	
          public void actionPerformed(ActionEvent arg0)
          {		 
            for(int i=0; i<Constantes.CCOL; i++) {
            // Tableau contenant la valeur de nos checkBox du tableau
            m_champsVal[i] = Boolean.parseBoolean(m_tableau.getValueAt(i, 1).toString());
            }	
          }
          


          Voici mon tableau, j'ai fais un modèle pour avoir les checkbox en cases correctes.
          for(int i=0; i<Constantes.CCOL; i++) {
            data[i][0] = Constantes.NCOL[i];
          		
            if(i==0)
              data[i][1] = new Boolean(true);
            else
              data[i][1] = new Boolean(false); 
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            19 juillet 2011 à 15:24:43

            En mettant un listener dans le constructeur, tu peux réutiliser ta checkbox n'importe où, elle aura toujours le même effet.

            En mettant l'action dans le getValueAt, ta checkBox devient morte, et c'est ta table qui gère l'évenement en fait. C'est moins naturel je trouve.

            Donc je maintiens mon point de vue. La table devrait selon moi afficher des objets dont le comportement est cohérent : c'est le principe du couplage faible entre les objets. Néanmoins, ces objets peuvent implémenter TableCellEditor et TableCellRenderer, au cas où ils seraient mis dans une table.

            Sinon, non je n'écrirais pas de code, tant que je n'ai pas vu le tien, qui montre que tu as au moins essayé et lu la doc java pour ton problème. Surtout que le tuto du site du zéro est très très clair sur le comment mettre des composants dans des tableaux.
            • Partager sur Facebook
            • Partager sur Twitter
              19 juillet 2011 à 20:20:22

              d'abord "merci" pour le code C4stor
              concernant le tuto de site je l'ai lu et reli mais il m'a pas aidé car moi je veux une cellule jcheckbox avec l'ecriture a cote pas seulement chckbox de true et false qui est mis dans le tuto du site
              enfin j'ai trouve un exemple en utilisant jlist et l'action avec mouseListener je l'ai utilisé ca marche bien
              le voici
              import javax.swing.*;
              import javax.swing.border.*;
              import java.awt.*;
              import java.awt.event.*;
               
              public class JListAvecCheckbox extends JList
              {
                  protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
               
                  public JListAvecCheckbox()
                  {
                      setCellRenderer(new CheckBoxCellRenderer());
               
                      addMouseListener(new MouseAdapter()
                      {
                          public void mousePressed(MouseEvent e)
                          {
                              int index = locationToIndex(e.getPoint());
                              System.out.println("index  :  "+index);
                              if (index != -1)
                              {
                                  JCheckBox checkbox = (JCheckBox) getModel().getElementAt(index);
                                  if(checkbox.isSelected() !=  true) { System.out.println("je l'ai selectionné "); }
                                  checkbox.setSelected(!checkbox.isSelected());
                                  repaint();
                              }
                          }
                      });
               
                  }
               
                  protected class CheckBoxCellRenderer implements ListCellRenderer
                  {
                      public Component getListCellRendererComponent(JList list, Object value, int index,
                                                                    boolean isSelected, boolean cellHasFocus)
                      {
                      	 // Check box renderer
                          JCheckBox maCheckbox = (JCheckBox) value;
               
                          maCheckbox.setEnabled(true);
                          maCheckbox.setBorderPainted(false);
               
                          return maCheckbox;
                      }
                  }
               
               
                  public static void main(String args[])
                  {
                      JFrame frame = new JFrame();
                      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                      frame.getContentPane().setLayout(new BorderLayout());
               
                      JListAvecCheckbox cbList = new JListAvecCheckbox();
               
                      Object[] checkboxArray = new Object[3];
                      checkboxArray[0] = new JCheckBox("a");
                      checkboxArray[1] = new JCheckBox("z");
                      checkboxArray[2] = new JCheckBox("e");
               
                      cbList.setListData(checkboxArray);
               
                      cbList.setSelectedValue("a", true);
               
                      frame.getContentPane().add(cbList);
                      frame.pack();
                      frame.setVisible(true);
                  }
              }
              

              • Partager sur Facebook
              • Partager sur Twitter

              JCheckBox dans JTable

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown