Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableau avec des boutons

    26 avril 2015 à 15:55:23

    Bonjour,

    je cherche actuellement à faire une interface graphique pour un projet que j'ai déjà réaliser auparavant en mode console. Ce projet consiste en une création d'une grille de programme pour une chaîne de télévision. J'aimerais donc réaliser une interface graphique affichant un tableau contenant dans la premier colonne des String (0h, 1h ... jusqu'à 23h) et ensuite j'aimerais avoir 3 autres colonnes qui contiennent des boutons. Sur papier cela semble à faire mais je bloque... Je fais actuellement le cours sur les tableaux : http://openclassrooms.com/courses/apprenez-a-programmer-en-java/les-interfaces-de-tableaux mais je bloque sur l'affichage des boutons dans le tableau. Je pense qu'il doit me manquer des choses mais je ne vois pas lesquelles...

    Voici les classes que j'ai :

    public class Fenetre extends JFrame {
    
        private JTable tableau;
        private JButton change = new JButton("Changer la taille");
    
        public Fenetre() {
            this.setLocationRelativeTo(null);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setTitle("JTable");
            this.setSize(600, 140);
    
            Object[][] data = {
                {"Cysboy", new JButton("6boy"), new Double(1.80), new Boolean(true)},
                {"BZHHydde", new JButton("BZH"), new Double(1.78), new Boolean(false)},
                {"IamBow", new JButton("BoW"), new Double(1.90), new Boolean(false)},
                {"FunMan", new JButton("Year"), new Double(1.85), new Boolean(true)}
            };
    
            String title[] = {"Pseudo", "Age", "Taille", "OK ?"};
    
            ZModel model = new ZModel(data, title);
            System.out.println("Nombre de colonne : " + model.getColumnCount());
            System.out.println("Nombre de ligne : " + model.getRowCount());
            this.tableau = new JTable(model);
            this.tableau.setDefaultRenderer(JButton.class, new TableComponent());
            this.getContentPane().add(new JScrollPane(tableau), BorderLayout.CENTER);
    
        }
        
    
    }
    //Classe modèle personnalisée
        class ZModel extends AbstractTableModel {
    
            private Object[][] data;
            private String[] title;
    
            /**
             * Retourne le titre de la colonne à l'indice spécifié
             */
            public String getColumnName(int col) {
                return this.title[col];
            }
    
            //Constructeur
            public ZModel(Object[][] data, String[] title) {
                this.data = data;
                this.title = title;
            }
    
            //Retourne le nombre de colonnes
            public int getColumnCount() {
                return this.title.length;
            }
    
            //Retourne le nombre de lignes
            public int getRowCount() {
                return this.data.length;
            }
    
            //Retourne la valeur à l'emplacement spécifié
            public Object getValueAt(int row, int col) {
                return this.data[row][col];
            }
    
        //Retourne vrai si la cellule est éditable : celle-ci sera donc éditable
    
        public boolean isCellEditable(int row, int col) {
      //On appelle la méthode getValueAt qui retourne la valeur d'une cellule
            //Et on effectue un traitement spécifique si c'est un JButton
            if (getValueAt(0, col) instanceof JButton) {
                return false;
            }
            return true;
        }
    }

    et

    public class TableComponent extends DefaultTableCellRenderer {
    
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        //Si la valeur de la cellule est un JButton, on transtype cette valeur
        if (value instanceof JButton)
          return (JButton) value;
        else
          return this;
      }
    }

    Je pense que je me suis trompé quelque part mais j'ai beau chercher je ne vois pas du tout...

    Merci d'avance pour votre aide,

    Emilien.


    • Partager sur Facebook
    • Partager sur Twitter
    "La seule façon de découvrir les limites du possible est d'aller au-delà, dans l'impossible." Arthur C. CLARKE

    Tableau avec des boutons

    × 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