Bonjour,

j'aimerais simplement entourer la bordure d'une cellule d'une JTable en rouge après l'action d'un bouton.

Pour la création de la Jtable, j'ai le bout de code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
   this.table_phases = new JTable();
   this.table_phases.setDefaultRenderer(Object.class, new CheckDataCellRenderer());
        this.table_phases.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        this.table_phases.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                if (e.getValueIsAdjusting()) {
                     // d'autres action...
                }
            }
        }
   }
Et pour la gestion de l'affichage des cellules de la Jtable, j'ai le bout de code suivant :

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
public class CheckDataCellRenderer extends DefaultTableCellRenderer {
 
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
 
            Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
 
            if (cell instanceof JLabel) {
                JLabel label = (JLabel) cell;
 
                if (label.getText().isEmpty()) {
                    label.setBorder(BorderFactory.createLineBorder(Color.red));
                } else {
                    label.setBorder(Constants.DEFAULT_BORDER);
                }
            }
 
            return cell;
        }
    }
Pour le moment, lorsqu'une cellule est vide elle est entourée en rouge.
J'aimerais juste appliquer cette action lors d'un click sur un bouton par exemple.

J'avais pensé à initialiser lors de mon click une map pour les cellules à contrôler et à inclure cette map dans le renderer CheckDataCellRenderer.

Pensez-vous que cette solution est propre ou avez-vous une solution plus propre ?