Maison > Java > javaDidacticiel > Comment conserver le rendu personnalisé des cellules JTable après la modification ?

Comment conserver le rendu personnalisé des cellules JTable après la modification ?

Susan Sarandon
Libérer: 2024-11-30 19:42:11
original
310 Les gens l'ont consulté

How to Preserve Custom JTable Cell Rendering After Editing?

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);
Copier après la connexion

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;
    }
}
Copier après la connexion
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);
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal