Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JAVA] JTable

rajouter des bouton etc...

    22 août 2006 à 16:21:41

    Bonjour j'aimerais savoir comment faire pour que :
    une collone de table contienne : un bouton ou un liste déroulante....

    merci de votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      22 août 2006 à 23:49:01 - Message modéré pour le motif suivant : Useless


        23 août 2006 à 11:47:56

        JTable est typique de Java ;)

        Pour répondre à ta question, il faut utiliser un renderer adapté. Un renderer est chargé de gérer l'aspect visuel d'un élément.

        Pour les tableaux, il faut utiliser (et implémenter, au besoin) un TableCellRenderer. Intéresse-toi à TableColumn.setCellRenderer pour associer un renderer à une colonne (ce que tu veux faire).

        Il est aussi possible d'associer une classe à un renderer avec JTable.setDefaultRenderer(maClasse, monRenderer).
        • Partager sur Facebook
        • Partager sur Twitter
          23 août 2006 à 12:55:04

          Dans mon cas, j'ai une liste des numéros de téléphone pour une personne...
          Donc le plus approprié => JTable.setDefaultRenderer(maclassPersonne, monRenderer). ??
          • Partager sur Facebook
          • Partager sur Twitter
            23 août 2006 à 13:40:34

            Oui mais ce ne serait pas maclassPersonne mais ArrayList (si la liste est stockée sous forme d'ArrayList. Ainsi le renderer modifie l'affichage d'une liste dans un tableau comme tu le souhaites.
            • Partager sur Facebook
            • Partager sur Twitter
              23 août 2006 à 16:55:45

              Pour le moment j'ai reussi a faire ca mais j'ai besoin de vous pour la suite parce que je bloque, même avec l'aide de la JavaDoc...


              import javax.swing.*;
              import javax.swing.table.*;
              import java.awt.BorderLayout;
              import java.awt.Component;
              import java.util.ArrayList;

              public class mainFrame extends JFrame {

                      public mainFrame() {
                              super();
                              setTitle("Agenda");

                              menu = new constructeurMenu();
                              setJMenuBar(menu);

                              pers.add(new personne("Jean", "Pierre"));

                              TableModel model = new PersoModel(pers);
                              JTable table = new JTable(model);
                              add(new JScrollPane(table), BorderLayout.CENTER);
                              table.setDefaultRenderer(personne.class, new NumeroRendered());
                      }

                      private ArrayList<personne> pers = new ArrayList<personne>();

                      private JMenuBar menu;

                      private static final long serialVersionUID = -1849225056508040264L;

              }

              class PersoModel extends AbstractTableModel {

                      public PersoModel(ArrayList<personne> p) {
                              pers = p;
                      }

                      public String getColumnName(int c) {
                              if(c==0)
                                      return "Prenom";
                              else if(c==1)
                                      return "Nom";
                              else
                                      return "Liste numéro" ;
                      }

                      public int getColumnCount() {
                              return 3;
                      }

                      public int getRowCount() {
                              return pers.size();
                      }

                      public Object getValueAt(int r, int c) {
                              if (c == 0)
                                      return pers.get(r).getPrenom();
                              else if(c==1)
                                      return pers.get(r).getNom();
                              else
                                      return "";
                      }

                      private ArrayList<personne> pers = new ArrayList<personne>();

              }

              class NumeroRendered extends JPanel implements TableCellRenderer {

                      public Component getTableCellRendererComponent(JTable table, Object value,
                                      boolean isSelected, boolean hasFocus, int row, int column) {
                             
                              System.out.print(value);
                             
                              return this;
                      }
                     
              }



              dans personne la liste des numéro est stocké dans un ArrayList<String>.
              Pour avoir ce tableau, on appel getListeNumero...

              • Partager sur Facebook
              • Partager sur Twitter
                23 août 2006 à 21:12:36

                Bon première chose que je vois c'est que le NumeroRendered n'est pas bon puisqu'il ne fait qu'afficher "en console" l'objet passé. En plus comme l'objet passé est un ArrayList donc l'affichage est du grand n'importe quoi.

                Pour le reste est-ce que l'ensemble compile mais fait un affichage bizard?

                Normalement, rien qu'en définissant un TableModel en redéfinissant


                public Class getColumnClass(int c)
                {
                   return getValueAt(0,c).getClass();
                }


                On place alors dans le JTable non pas un ArrayList mais un JComboBox contenant l'ArrayList.

                Ca pourrait arranger les choses car même un renderer par défaut peut alors deviner quelle forme il faut donner à chaque cellule. En réalité un renderer personalisé n'est nécessaire que si on souhaite modifier "profondément" l'apparence du tableau, par exemple en y intégrant des éléments à priori inconnu du renderer.

                Je dois avouer que je ne me suis jamais soucier d'intégrer des choix déroulants dans un JTable.

                Est-ce que la redéfinition de la méthode ci-dessus et l'utilisation d'un renderer par défaut résoud le problème?
                • Partager sur Facebook
                • Partager sur Twitter
                  23 août 2006 à 21:21:07

                  L'ensemble que je te proposais compile mais je voulais afficher dans la console pour voir, et la méthode n'est même pas appelée.
                  Je vais tester ta proposition
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [JAVA] 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