J'utilise un JTable
qui possède son propre moteur de rendu de cellules et un éditeur de cellules.Mise à jour du rendu de cellule après exécution d'une instance dérivée de DefaultCellEditor
Say, cette table contient 2 colonnes et x rangées:
La première colonne contient une valeur booléenne, son propre rendu cellulaire et éditeur de cellule (un radiobutton)
La deuxième colonne contient une valeur de chaîne, son propre moteur de rendu de cellule : il le rend gras lorsque la première colonne de la ligne courante est définie sur true (case cochée)
Toutes les valeurs sont correctement mises à jour par l'éditeur mais la 2ème ligne ne devient pas en gras lorsque le bouton radio est défini sur true ...
Je dois cocher une case d'une rangée différente pour voir les changements
Où puis-je tirer ces changements?
Vive et merci pour votre aide
RadiobuttonTableCellEditor.java
public class RadiobuttonTableCellEditor extends DefaultCellEditor
implements ItemListener {
JRadioButton rb = new JRadioButton();
public RadiobuttonTableCellEditor(JCheckBox pCheckBox) {
super(pCheckBox);
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
if (value == null)
return null;
rb.addItemListener(this);
rb.setSelected((Boolean)value);
return rb;
}
public void itemStateChanged(ItemEvent e) {
super.fireEditingStopped();
}
public Object getCellEditorValue() {
rb.removeItemListener(this);
return rb.isSelected();
}
}
Merci pour votre aide j'ai ajouté une déclaration de membre de la JTable que je référence quand j'appelle getTableCellEditorComponent. Ensuite, bien getCellEditorValue est appelé état I:. \t \t if (! Table = null) { \t \t \t ((AbstractTableModel) table.getModel()) fireTableDataChanged(); \t \t} –
Même si cela fonctionne probablement, votre approche n'est pas correcte. vous devez appeler les méthodes fireXXX dans le modèle de table en réponse à la modification de DATA.En aucun cas vous ne devriez le faire dans le moteur de rendu ou l'éditeur. L'idée est simple. votre éditeur enregistrera une nouvelle valeur dans le modèle en utilisant la méthode model.setValueAt. Ensuite, le modèle devrait informer toutes les parties intéressées que les données ont changé. Vos moteurs de rendu et éditeurs réagiront automatiquement aux changements. –