Maintenir le rendu des cellules JTable après la modification de la cellule
On peut rencontrer la situation où le format de rendu personnalisé d'une cellule JTable (par exemple, le formatage de la devise) est perdu après l'édition de la cellule. Ce problème se pose car par défaut, le processus d'édition met directement à jour le modèle de table, en contournant le moteur de rendu personnalisé.
Solution
Pour résoudre ce problème, on peut étendre la valeur setValueAt de la table. () pour garantir que le moteur de rendu personnalisé est appliqué à la valeur de cellule mise à jour. Voici un exemple :
table.setValueAt(newValue, rowIndex, columnIndex); ((TableModel) table.getModel()).fireTableCellUpdated(rowIndex, columnIndex);
Vous pouvez également créer un CellEditor personnalisé qui utilise le moteur de rendu personnalisé comme composant d'éditeur. Ce faisant, l'éditeur peut appliquer le formatage personnalisé à la valeur lors de l'édition, et le moteur de rendu peut afficher la valeur formatée une fois l'édition terminée.
Exemple
Le le code suivant montre un éditeur de devises personnalisé qui utilise un CurrencyRenderer :
public class CurrencyEditor extends DefaultCellEditor { private JTextField textField; public CurrencyEditor() { super(new JTextField()); textField = (JTextField) this.getComponent(); textField.setHorizontalAlignment(JTextField.RIGHT); textField.setBorder(null); } @Override public Object getCellEditorValue() { try { return new Double(textField.getText()); } catch (NumberFormatException e) { return Double.valueOf(0); } } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { textField.setText((value == null) ? "" : CurrencyRenderer.format(value)); return textField; } }
public class CurrencyRenderer extends DefaultTableCellRenderer { private static DecimalFormat formatter = new DecimalFormat("$###,##0.00"); public CurrencyRenderer() { this.setHorizontalAlignment(JLabel.RIGHT); } @Override public void setValue(Object value) { setText((value == null) ? "" : formatter.format(value)); } public static String format(Object value) { return formatter.format(value); } }
En utilisant les exemples fournis, vous pouvez maintenir le rendu de cellule personnalisé après l'édition de cellule dans une JTable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!