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

AWT/Swing Java Discussion :

Ajout boutons "modifier" dans ma dernière colonne JTable


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Par défaut Ajout boutons "modifier" dans ma dernière colonne JTable
    Bonjour,

    j'ai un JTable dans laquel je récupère les clients d'une base de données.
    J'aimerai ajouter des boutons "modifier" dans ma dernière colonne à toutes les lignes, afin de pouvoir faire un update d'un client.

    Nom : TableClient.PNG
Affichages : 1407
Taille : 23,1 Ko

    Ma classe TabUpdateClient
    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
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    package be.iepscfjemelle.nicolay.projet_sgbd.vues;
     
    import be.iepscfjemelle.nicolay.projet_sgbd.controler.Controler;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Component;
    import static java.awt.Component.CENTER_ALIGNMENT;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.ArrayList;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.TableCellRenderer;
     
    /**
     * Class qui va me permettre de de choisir un client dans une table pour faire
     * une modification
     *
     */
    public class TabUpdateClient extends JDialog {
     
        /**
         * Attributs
         */
        private final Controler contr;
        private final ArrayList list;
     
        /**
         * Attributs graphique
         */
        private JPanel mainPanel, panelhaut;
        private JLabel label;
        private JTable tableau;
     
        /**
         * Constructeur
         *
         * @param list
         * @param contr
         */
        public TabUpdateClient(ArrayList list, Controler contr) {
            this.contr = contr;
            this.list = list;
            initComponent();
        }
     
        private void initComponent() {
            //Config de la fenêtre
            setTitle("Liste des clients");
            setSize(1200, 700);
            setResizable(true);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
            Container contenu = getContentPane();
     
            //Config du label et de la table.
            //création de mon panel principal
            mainPanel = new JPanel();
            mainPanel.setLayout(new BorderLayout());
            contenu.add(mainPanel);
     
            //Création du panel du haut
            panelhaut = new JPanel();
            mainPanel.add(panelhaut, BorderLayout.NORTH);
     
            //Creation et config du tableau
            tableau = new JTable(new TabModelUpdateClients(this.list));
            tableau.getTableHeader().setBackground(Color.blue);//fond entête colonne
            tableau.getTableHeader().setForeground(Color.WHITE);//Couleur police entêtecolonne
            JScrollPane tabContainer = new JScrollPane(tableau);
            tableau.setAutoCreateRowSorter(true);//Permet le tri en cliquant sur le entête de colonne   
            //tableau.removeColumn(tableau.getColumnModel().getColumn(0));//je chache la colonne id
            mainPanel.add(tabContainer, BorderLayout.CENTER);
     
            //ajout du label au panel du haut
            label = new JLabel("Nombres de clients: " + tableau.getRowCount(), (int) CENTER_ALIGNMENT);
            Font font = new Font("Arial", Font.BOLD, 20);
            label.setFont(font);
            panelhaut.add(label);
     
            /**
             * TableCellRenderer pour les String, qui permet de donné un rendu aux
             * cellule d'un tableau, via une classe anonyme. Si Paire, fond blanc,
             * impaire fond gris légé.
             */
            tableau.setDefaultRenderer(Object.class,
                     new TableCellRenderer() {
                private final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
     
                @Override
                public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                    Component cel = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                    if (row % 2 == 0) {
                        cel.setBackground(Color.WHITE);
                    } else {
                        cel.setBackground(Color.LIGHT_GRAY);
                    }
                    return cel;
                }
            }
            );
     
            //fenetre de confirmation quand clic croix
            addWindowListener(
                    new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e
                ) {
                    int confirmed = JOptionPane.showConfirmDialog(null, "Voulez-vous quitter la fenêtre?", "Quitter modification client", JOptionPane.YES_NO_OPTION);
                    if (confirmed == JOptionPane.YES_OPTION) {
                        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
                    } else {
                        setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
                    }
                }
            }
            );
     
            /**
             * méthode qui va permettre de recréer un objet à partir d'un clic de
             * souris dans ma table.
             *
             * @param event
             */
            /*tableau.addMouseListener(new java.awt.event.MouseAdapter() {//class anonyme         
                @Override
                public void mouseClicked(java.awt.event.MouseEvent event) {
                    int row = tableau.rowAtPoint(event.getPoint());//renvoie le numéro de la ligne
                    //on récupère les info dans la ligne clickée et dans chaque colonne pour recréer un objet à partir d'un clic dans une colonne
                    Client clientSelected = new Client();
                    clientSelected.setId((int) tableau.getModel().getValueAt(row, 0));        
                    clientSelected.setPrenom((String) tableau.getModel().getValueAt(row, 1));             
                    clientSelected.setNom((String) tableau.getModel().getValueAt(row, 2));    
                    //clic sur une ligne client affiche une deuxième fenêtre avec boutons
                    //qui permet de voir les films loués par un client sous forme de tableau ou de graphique.
                    gest.afficheFilmsLouesClient(clientSelected.getId(), clientSelected.getPrenom(), clientSelected.getNom());          
                }
            });*/
        }
     
    }
    Ma class TabModelUpdateClients:
    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
     
     
    package be.iepscfjemelle.nicolay.projet_sgbd.vues;
     
    import be.iepscfjemelle.nicolay.projet_sgbd.model.Client;
    import java.util.ArrayList;
    import javax.swing.table.AbstractTableModel;
     
    /**
     * Table modèle avec la colonne et bouton modifier
     */
    public class TabModelUpdateClients extends AbstractTableModel {
     
        /**
         * Attributs
         */
        private final ArrayList list;
        private final String[] columnNames = {"id", "numéro national", "Nom", "Prénom", "Téléphone", "Email", "Date de naissance", "Adresse", "Modification"};
     
        /**
         * Constructeur
         * @param list 
         */
        public TabModelUpdateClients(ArrayList list) {
            this.list = list;
        }
     
        /**
         * Renvoie un nom par défaut pour la colonne.
         *
         * @param col /nom de colonne
         * @return String
         */
        @Override
        public String getColumnName(int col) {
            String result = "";
            switch (col) {
                case 0:
                    result = columnNames[0];
                    break;
                case 1:
                    result = columnNames[1];
                    break;
                case 2:
                    result = columnNames[2];
                    break;
                case 3:
                    result = columnNames[3];
                    break;
                case 4:
                    result = columnNames[4];
                    break;
                case 5:
                    result = columnNames[5];
                    break;
                case 6:
                    result = columnNames[6];
                    break;
                case 7:
                    result = columnNames[7];
                    break;
                case 8:
                    result = columnNames[8];
                    break;
                default:
                    break;
            }
            return result;
        }
     
        /**
         * Retourne le nombre de lignes dans le modèle. Un JTable utilise cette
         * méthode pour déterminer le nombre de lignes à afficher. Cette méthode
         * devrait être rapide, car elle est appelée fréquemment pendant le rendu.
         *
         * @return int
         */
        @Override
        public int getRowCount() {
            if (list == null) {
                return 0;
            } else {
                return list.size();
            }
        }
     
        /**
         * Renvoie le nombre de colonnes du modèle. Un JTable utilise cette méthode
         * pour déterminer le nombre de colonnes à créer et à afficher par défaut.
         *
         * @return int
         */
        @Override
        public int getColumnCount() {
            return columnNames.length;
     
        }
     
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            Client client = (Client) list.get(rowIndex);
            switch (columnIndex) {
                case 0:
                    return client.getIdClient();
                case 1:
                    return client.getNumeroNational();
                case 2:
                    return client.getNomClient();
                case 3:
                    return client.getPrenomClient();
                case 4:
                    return client.getTelephoneClient();
                case 5:
                    return client.getMailClient();
                case 6:
                    return client.getDateNaissanceClient();
                case 7:
                    return client.getAdresseClient();
            }
            return null;
        }
     
    }
    J'ai cherché comment ajouter ces boutons, mais je coince.

  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,

    Il te faut implémenter TableCellRenderer et TableCellEditor, et prévoir une colonne spécifique pour le bouton.


    Un exemple ici.
    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 confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Par défaut
    Bonsoir, j'ai fais comme ceci.

    Ajout d'une class TableButton qui implement TableCellRenderer et TableCellEditor:
    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
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    package be.iepscfjemelle.nicolay.projet_sgbd.vues;
     
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.Serializable;
    import javax.swing.AbstractCellEditor;
    import javax.swing.JButton;
    import javax.swing.JTable;
    import javax.swing.UIManager;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableCellRenderer;
     
    /**
     * Class de mon mes boutons dans une table
     *
     * @author Fred
     */
    public abstract class TableButton extends AbstractCellEditor implements TableCellRenderer, TableCellEditor {
     
        private static final long serialVersionUID = 1L;
     
        private final JButton buttonRenderer;
        private final JButton buttonEditor;
        private final ButtonActionListener actionListener;
        private Color unselectedBackground;
        private Color unselectedForeground;
        private transient Object data;
     
        public TableButton() {
            buttonRenderer = new JButton();
            buttonEditor = new JButton();
            actionListener = new ButtonActionListener();
            buttonEditor.addActionListener(actionListener);
        }
     
        public void setForeground(Color c) {
            buttonRenderer.setBackground(c);
            buttonRenderer.setForeground(c);
            unselectedForeground = c;
        }
     
        public void setBackground(Color c) {
            buttonRenderer.setBackground(c);
            buttonEditor.setBackground(c);
            unselectedBackground = c;
        }
     
        public void updateUI() {
            buttonRenderer.updateUI();
            buttonEditor.updateUI();
            setForeground(null);
            setBackground(null);
        }
     
        @Override
        public Object getCellEditorValue() {
            return data;
        }
     
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
     
            decorateButton(buttonRenderer, table, value, isSelected, hasFocus, row, column);
     
            return buttonRenderer;
     
        }
     
        protected void decorateButton(JButton button, JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            String text = "Modification";
            button.setText(text);
            Color fg = null;
            Color bg = null;
     
            JTable.DropLocation dropLocation = table.getDropLocation();
            if (dropLocation != null
                    && !dropLocation.isInsertRow()
                    && !dropLocation.isInsertColumn()
                    && dropLocation.getRow() == row
                    && dropLocation.getColumn() == column) {
     
                fg = UIManager.getColor("Table.dropCellForeground");
                bg = UIManager.getColor("Table.dropCellBackground");
     
                isSelected = true;
            }
     
            if (isSelected) {
                button.setForeground(fg == null ? table.getSelectionForeground()
                        : fg);
                button.setBackground(bg == null ? table.getSelectionBackground()
                        : bg);
            } else {
                Color background = unselectedBackground != null
                        ? unselectedBackground
                        : table.getBackground();
                if (background == null || background instanceof javax.swing.plaf.UIResource) {
                    Color alternateColor = UIManager.getColor("Table.alternateRowColor");
                    if (alternateColor != null && row % 2 != 0) {
                        background = alternateColor;
                    }
                }
                button.setForeground(unselectedForeground != null
                        ? unselectedForeground
                        : table.getForeground());
                button.setBackground(background);
            }
     
            button.setFont(table.getFont());
     
            if (hasFocus) {
                if (!isSelected && table.isCellEditable(row, column)) {
                    Color col;
                    col = UIManager.getColor("Table.focusCellForeground");
                    if (col != null) {
                        button.setForeground(col);
                    }
                    col = UIManager.getColor("Table.focusCellBackground");
                    if (col != null) {
                        button.setBackground(col);
                    }
                }
            }
     
        }
     
        @Override
        public Component getTableCellEditorComponent(JTable table, Object value,
                boolean isSelected, int row, int column) {
            data = value;
            decorateButton(buttonEditor, table, value, isSelected, true, row, column);
            actionListener.setAction(table, value, row, column);
            return buttonEditor;
        }
     
        protected abstract String getButtonText(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column);
     
        protected abstract void actionPerformed(JTable table, Object value, int row, int column);
     
        private class ButtonActionListener implements ActionListener, Serializable {
     
            private static final long serialVersionUID = 1L;
     
            private transient JTable table;
            private transient Object value;
            private transient int row;
            private transient int column;
     
            public void setAction(JTable table, Object value,
                    int row, int column) {
                this.table = table;
                this.value = value;
                this.row = row;
                this.column = column;
            }
     
            @Override
            public void actionPerformed(ActionEvent e) {
                TableButton.this.actionPerformed(table, value, row, column);
                stopCellEditing();
            }
     
        }
     
        /**
         * Installation du bouton dans une colonne
         * @param table
         * @param column 
         */
        public void install(JTable table, int column) {
            table.getColumnModel().getColumn(column).setCellRenderer((TableCellRenderer) this);
            table.getColumnModel().getColumn(column).setCellEditor((TableCellEditor) this);
        }
     
     
    }
    ma class TabUpdateClient:
    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
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    package be.iepscfjemelle.nicolay.projet_sgbd.vues;
     
    import be.iepscfjemelle.nicolay.projet_sgbd.controler.Controler;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Component;
    import static java.awt.Component.CENTER_ALIGNMENT;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.ArrayList;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.TableCellRenderer;
     
    /**
     * Class qui va me permettre de de choisir un client dans une table pour faire
     * une modification
     *
     * @author Fred
     */
    public class TabUpdateClient extends JDialog {
     
        /**
         * Attributs
         */
        private final Controler contr;
        private final ArrayList list;
     
        /**
         * Attributs graphique
         */
        private JPanel mainPanel, panelhaut;
        private JLabel label;
        private JTable tableau;
     
        /**
         * Constructeur
         *
         * @param list
         * @param contr
         */
        public TabUpdateClient(ArrayList list, Controler contr) {
            this.contr = contr;
            this.list = list;
            initComponent();
        }
     
        private void initComponent() {
            //Config de la fenêtre
            setTitle("Modification des clients");
            setSize(1200, 700);
            setResizable(true);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
            Container contenu = getContentPane();
     
            //Config du label et de la table.
            //création de mon panel principal
            mainPanel = new JPanel();
            mainPanel.setLayout(new BorderLayout());
            contenu.add(mainPanel);
     
            //Création du panel du haut
            panelhaut = new JPanel();
            mainPanel.add(panelhaut, BorderLayout.NORTH);
     
            //Creation et config du tableau
            tableau = new JTable(new TabModelUpdateClients(this.list));
            tableau.getTableHeader().setBackground(Color.blue);//fond entête colonne
            tableau.getTableHeader().setForeground(Color.WHITE);//Couleur police entêtecolonne
            JScrollPane tabContainer = new JScrollPane(tableau);
            tableau.setAutoCreateRowSorter(true);//Permet le tri en cliquant sur le entête de colonne   
            mainPanel.add(tabContainer, BorderLayout.CENTER);
     
            //ajout du label au panel du haut
            label = new JLabel("Nombres de clients: " + tableau.getRowCount(), (int) CENTER_ALIGNMENT);
            Font font = new Font("Arial", Font.BOLD, 20);
            label.setFont(font);
            panelhaut.add(label);
     
            /**
             * TableCellRenderer pour les String, qui permet de donné un rendu aux
             * cellule d'un tableau, via une classe anonyme. Si Paire, fond blanc,
             * impaire fond gris légé.
             */
            tableau.setDefaultRenderer(Object.class,
                    new TableCellRenderer() {
                private final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
     
                @Override
                public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                    Component cel = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                    if (row % 2 == 0) {
                        cel.setBackground(Color.WHITE);
                    } else {
                        cel.setBackground(Color.LIGHT_GRAY);
                    }
                    return cel;
                }
            }
            );
     
            /**
             * 
             */
            TableButton button = new TableButton() {
                private static final long serialVersionUID = 1L;
                protected String getButtonText(JTable table, Object value,
                        boolean isSelected, boolean hasFocus, int row, int column) {
                    return String.valueOf(value);
                }
                protected void actionPerformed(JTable table, Object value, int row,
                        int column) {
                    System.out.println("Action sur ligne " + row + " et colonne " + column);
                }
            };
            // boutton sur la colonne 8
            button.install(tableau, 8);
     
            //fenetre de confirmation quand clic croix
            addWindowListener(
                    new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e
                ) {
                    int confirmed = JOptionPane.showConfirmDialog(null, "Voulez-vous quitter la fenêtre?", "Quitter modification client", JOptionPane.YES_NO_OPTION);
                    if (confirmed == JOptionPane.YES_OPTION) {
                        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
                    } else {
                        setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
                    }
                }
            }
            );
     
            /**
             * méthode qui va permettre de recréer un objet à partir d'un clic de
             * souris dans ma table.
             *
             * @param event
             */
            /*tableau.addMouseListener(new java.awt.event.MouseAdapter() {//class anonyme         
                @Override
                public void mouseClicked(java.awt.event.MouseEvent event) {
                    int row = tableau.rowAtPoint(event.getPoint());//renvoie le numéro de la ligne
                    //on récupère les info dans la ligne clickée et dans chaque colonne pour recréer un objet à partir d'un clic dans une colonne
                    Client clientSelected = new Client();
                    clientSelected.setId((int) tableau.getModel().getValueAt(row, 0));        
                    clientSelected.setPrenom((String) tableau.getModel().getValueAt(row, 1));             
                    clientSelected.setNom((String) tableau.getModel().getValueAt(row, 2));    
                    //clic sur une ligne client affiche une deuxième fenêtre avec boutons
                    //qui permet de voir les films loués par un client sous forme de tableau ou de graphique.
                    gest.afficheFilmsLouesClient(clientSelected.getId(), clientSelected.getPrenom(), clientSelected.getNom());          
                }
            });*/
        }
     
    }
    Il n'y a pas d'action de mes boutons "Modifier" pour le moment, j'avais déjà codé un MouseListener quand je cliquais sur une ligne de mon tableau, je récupérais le numéro de la ligne et les attibuts d'un client de ma DB.

    J'aimerais faire la même chose avec les boutons, récupérer le numéro de la ligne, qui récupérerait les attributs d'un client afin de faire des modifications.

    je suppose que je dois modifier la méthode actionPerformed? Mais avec quel méthode pour récupérer un numéro de ligne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TableButton button = new TableButton() {
                private static final long serialVersionUID = 1L;
                protected String getButtonText(JTable table, Object value,
                        boolean isSelected, boolean hasFocus, int row, int column) {
                    return String.valueOf(value);
                }
                protected void actionPerformed(JTable table, Object value, int row,
                        int column) {
                    System.out.println("Action sur ligne " + row + " et colonne " + column);
                }
            };
            // boutton sur la colonne 8
            button.install(tableau, 8);

  4. #4
    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
    Citation Envoyé par Cisman Voir le message
    je suppose que je dois modifier la méthode actionPerformed? Mais avec quel méthode pour récupérer un numéro de ligne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TableButton button = new TableButton() {
                private static final long serialVersionUID = 1L;
                protected String getButtonText(JTable table, Object value,
                        boolean isSelected, boolean hasFocus, int row, int column) {
                    return String.valueOf(value);
                }
                protected void actionPerformed(JTable table, Object value, int row,
                        int column) {
                    System.out.println("Action sur ligne " + row + " et colonne " + column);
                }
            };
            // boutton sur la colonne 8
            button.install(tableau, 8);
    Oui le principe c'est d'implémenter la méthode actionPerformed à ta sauce. Et dans cette méthode tu as directement en paramètre :
    1. la jtable
    2. la valeur dans la colonne (en général le texte du bouton, mais ça peut être n'importe quoi, et dans ce cas il faut adapter getButtonText()
    3. la ligne (le paramètre row), donc pas besoin de méthode
    4. la colonne (du bouton), pour récupérer les autres, passer par le paramètre table
    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.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2017
    Messages : 176
    Par défaut
    Bonjour,

    je dois également rendre la table modifiable?
    parce que lorsque je clic sur une autre colonne, ça réagi.
    Par contre aucune réaction lorsque je clic sur un des boutons "Modifier", je ne le vois même pas s'enfoncer.

  6. #6
    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
    Oui, il faut que la colonne du bouton soit éditable.
    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.

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

Discussions similaires

  1. Ajout d'un bouton pour modifier une quantitée dans une listbox
    Par rodolphenc dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/07/2017, 05h28
  2. Ajout automatique de quotes dans une clause IN
    Par fabrices77 dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/03/2013, 19h41
  3. Ajouter 'TER222' devant un nombre dans toute une colonne
    Par TheTcha dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 08/01/2013, 12h50
  4. Ajout d'une quote (') dans une chaine de caractère
    Par moutu91 dans le forum Débuter
    Réponses: 2
    Dernier message: 19/01/2009, 11h58

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