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

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

Mary-Kate Olsen
Libérer: 2024-12-07 13:27:13
original
989 Les gens l'ont consulté

How Can I Maintain Custom JTable Cell Rendering After Cell Editing?

Maintenir le rendu des cellules JTable après la modification de la cellule

Dans une JTable, la mise en œuvre de capacités de rendu et d'édition de cellules personnalisées peut améliorer l'expérience utilisateur. Cependant, il est crucial de s'assurer que le formatage souhaité est conservé même après les opérations d'édition.

Le problème

Après avoir configuré un moteur de rendu de cellules personnalisé pour formater un « prix » colonne, les utilisateurs ont rencontré une divergence dans laquelle le format numérique était perdu lors de la modification de la cellule. Dans de tels scénarios, la valeur par défaut du rendu de cellule peut ne pas être appliquée une fois la modification validée.

La solution

Pour conserver le rendu personnalisé après la modification de la cellule, il est essentiel d'utiliser les déclencheurs d'événements et les classes appropriés. Une fois l'édition terminée, la méthode editorStopped() de JTable collecte la nouvelle valeur via getCellEditorValue(). Le modèle est ensuite notifié avec setValueAt() et doit ensuite appeler fireTableCellUpdated(). Ce processus complet appelle le moteur de rendu, qui peut être étendu pour gérer des besoins de formatage particuliers.

Considérations supplémentaires

Pour des exigences de formatage plus complexes, il est recommandé d'envisager d'utiliser une instance du moteur de rendu personnalisé en tant que composant d'éditeur lui-même. Cela permet un meilleur contrôle sur l'apparence et le comportement de la cellule, garantissant un formatage cohérent même après des modifications de cellule.

Exemple

L'extrait de code suivant fournit un exemple d'implémentation qui montre comment pour formater les valeurs monétaires sous forme de nombres dans les cellules JTable. Le moteur de rendu personnalisé (CurrencyRenderer) gère le formatage de la devise, tandis que l'éditeur personnalisé (CurrencyEditor) permet aux utilisateurs de modifier les valeurs tout en conservant le formatage.

import java.awt.Component;
import java.awt.event.MouseEvent;
import java.text.NumberFormat;
import javax.swing.DefaultCellEditor;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableCellRenderer;

// Custom cell renderer for currency formatting
public class CurrencyRenderer extends DefaultTableCellRenderer {

    private NumberFormat formatter;

    public CurrencyRenderer(NumberFormat formatter) {
        this.formatter = formatter;
        setHorizontalAlignment(JLabel.RIGHT);
    }

    @Override
    public void setValue(Object value) {
        setText((value == null) ? "" : formatter.format(value));
    }
}

// Custom cell editor for currency input, maintaining the formatting
public class CurrencyEditor extends DefaultCellEditor {

    private NumberFormat formatter;
    private JTextField textField;

    public CurrencyEditor(NumberFormat formatter) {
        super(new JTextField());
        this.formatter = formatter;
        textField = (JTextField) 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)
                ? "" : formatter.format((Double) value));
        return textField;
    }
}
Copier après la connexion

En incorporant ces techniques, les développeurs peuvent garantir un rendu de cellule personnalisé et les capacités d'édition fonctionnent de manière transparente dans JTable, offrant une expérience de manipulation de données cohérente et conviviale.

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