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

 Java Discussion :

un JTable avec des buttons


Sujet :

Java

  1. #1
    Membre averti
    Homme Profil pro
    langage c
    Inscrit en
    Janvier 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : langage c
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 14
    Par défaut un JTable avec des buttons
    Bonjour .
    je veux réaliser une application gestion des salles avec des emploi du temps .j'ai crée la Table 'classes' dans la base de données avec les champs : idseance, idsalle ,IdProf, idmodule, day, 8H (type boolean),10H (type boolean),14h,16H. il m'affiche ça :
    Nom : Capture.PNG
Affichages : 1103
Taille : 14,7 Ko

    la Classe Fenetre :
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.TableColumn;
     
    public class Fenetre extends JFrame {
        private Statement st = null;
        private ResultSet rs; 
      private JTable tableau;
             connection con=new connection();
     
      public Fenetre() throws SQLException{
          st=con.getStatement();
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Emploi de Temps");
        this.setSize(700, 500);
     
                Object[][] data= new Object[5][4] ;
                String Sql="Select * from seance";
                 rs=st.executeQuery(Sql);
     
                while(rs.next()) {
                    switch (rs.getString("jour")){
                        case "lundi":
                            if (rs.getBoolean("8")){
                               data[0][0] = rs.getInt("Idmodule");                         
                            }else{data[0][0] = new JButton("Ajouter"); }
                            if (rs.getBoolean("10")){
                             data[0][1] = rs.getInt("Idmodule");   
                             }else { data[0][1] = new JButton("Ajouter");}
                             if(rs.getBoolean("14")){
                          data[0][2] = rs.getInt("Idmodule");   
                            }else {data[0][2] =new JButton("Ajouter"); }
                                 if(rs.getBoolean("16")){
                          data[0][3] = rs.getInt("Idmodule");   
                            }else {data[0][3] =new JButton("Ajouter") ;}
     
                        break;
                        case "mardi" :
                         if (rs.getBoolean("8")){
                               data[1][0] = rs.getInt("Idmodule");                                                             
                            }else {data[1][0] = new JButton("Ajouter");}
                             if(rs.getBoolean("10")){
                             data[1][1] = rs.getInt("Idmodule");   
                             }else {data[1][1] = new JButton("Ajouter");}
                                 if(rs.getBoolean("14")){
                          data[1][2] = rs.getInt("Idmodule");   
                            }else {data[1][2] = new JButton("Ajouter");}
                                     if(rs.getBoolean("16")){
                          data[1][3] = rs.getInt("Idmodule");   
                            }  else {data[1][3] = new JButton("Ajouter");}                  
                    }
                }
     
            String[] title = {"8h_10h","10h_12h"," 14h_16h","16h_18h"};
        ZModel model = new ZModel(data, title);
        this.tableau = new JTable(model);
        changeSize(80, 80);
        this.getContentPane().add(new JScrollPane(tableau), BorderLayout.CENTER);      
        this.tableau.setDefaultRenderer(JButton.class, new TableComponent());
      }
      ////////////////////////////////////////////////////////////////////////////////////
         public void changeSize(int width, int height){
        //Nous créons un objet TableColumn afin de travailler sur notre colonne
        TableColumn col;
        for(int i = 0; i < tableau.getColumnCount(); i++){    
            //On récupère le modèle de la colonne
            col = tableau.getColumnModel().getColumn(i);
            //On lui affecte la nouvelle valeur
            col.setPreferredWidth(width);
        }            
        for(int i = 0; i < tableau.getRowCount(); i++){
          //On affecte la taille de la ligne à l'indice spécifié !
            tableau.setRowHeight(i, height);
          }
        } 
         //////////////////////////////////////////////////////////////
      //Classe modèle personnalisée
      class ZModel extends AbstractTableModel{
        private Object[][] data;
        private String[] title;
     
        //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];
        } 
        public String getColumnName(int col) {
        return this.title[col];
        } public Class getColumnClass(int col){
        //On retourne le type de la cellule à la colonne demandée
        //On se moque de la ligne puisque les types de données sont les mêmes quelle que soit la ligne
        //On choisit donc la première ligne
        return this.data[0][col].getClass();
        }  
        //Retourne vrai si la cellule est éditable : celle-ci sera donc éditable
        public boolean isCellEditable(int row, int col){
            if(getValueAt(0, col) instanceof JButton)
        return false;
        return true;
     
        }  
      } 
    }
    la classe TableComponent :
    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
     
    import java.awt.Component;
    import javax.swing.JButton;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.TableCellRenderer;
     
      public class TableComponent extends DefaultTableCellRenderer implements TableCellRenderer{
     
      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
          setText((value != null) ? value.toString() : "Ajouter");
        if (value instanceof JButton)
          return (JButton) value;
        else
          return this;
      }
    }
    le Problème que les Buttons sont pas active (no cliquable ) et le champs de ligne 2 1 pas de bouton .
    merci ^_^ ;

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Un TableCellRenderer est fait pour gérer le rendu graphique des données de la JTable. Il n'y a aucune interactivité dans l'affichage. L'interactivité avec les cellules se gère par un TableCellEditor. Et on ne met surtout pas de JButton dans les données.

    Il y a des exemples dans ce tutoriel.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    langage c
    Inscrit en
    Janvier 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : langage c
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 14
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    Un TableCellRenderer est fait pour gérer le rendu graphique des données de la JTable. Il n'y a aucune interactivité dans l'affichage. L'interactivité avec les cellules se gère par un TableCellEditor. Et on ne met surtout pas de JButton dans les données.

    Il y a des exemples dans ce tutoriel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     this.tableau.getColumn("8h_10h").setCellRenderer(new ButtonRenderer());
    J'ai fait cette mais il me rendre tout le colonne comme un Bouton mais moi je veux faire des test sur chaque cellule mais je sais pas comment .

    la classe columnrenderer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class ButtonRenderer extends JButton implements TableCellRenderer{
    @Override
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean isFocus, int row, int col) {
        //On écrit dans le bouton ce que contient la cellule
        setText((value != null) ? value.toString() : "");
        //On retourne notre bouton
        return this;
      }   
    }

Discussions similaires

  1. JTable avec des noms de colonnes spécial
    Par OSryx dans le forum Composants
    Réponses: 5
    Dernier message: 05/10/2010, 14h26
  2. Remplir jtable avec des données d'un tableau
    Par kaisser dans le forum Composants
    Réponses: 1
    Dernier message: 01/01/2010, 18h19
  3. exemples de jtable avec des ImageIcons
    Par fred978 dans le forum Composants
    Réponses: 4
    Dernier message: 19/03/2007, 17h29
  4. JTable avec des JPanel dans les cellule
    Par pigpen dans le forum Composants
    Réponses: 11
    Dernier message: 13/04/2006, 19h58
  5. jTable avec des tables énormes
    Par netmailbeans@gmail.com dans le forum Composants
    Réponses: 3
    Dernier message: 13/02/2006, 21h24

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