Heim > Java > javaLernprogramm > Wie bleibt das benutzerdefinierte JTable-Zellen-Rendering nach der Bearbeitung erhalten?

Wie bleibt das benutzerdefinierte JTable-Zellen-Rendering nach der Bearbeitung erhalten?

Susan Sarandon
Freigeben: 2024-11-30 19:42:11
Original
310 Leute haben es durchsucht

How to Preserve Custom JTable Cell Rendering After Editing?

Beibehalten der JTable-Zellenwiedergabe nach der Zellenbearbeitung

Man kann auf die Situation stoßen, in der das benutzerdefinierte Renderingformat einer JTable-Zelle (z. B. Währungsformatierung) vorliegt nach Zellbearbeitung verloren gegangen. Dieses Problem entsteht, weil der Bearbeitungsprozess standardmäßig direkt das Tabellenmodell aktualisiert und dabei den benutzerdefinierten Renderer umgeht.

Lösung

Um dieses Problem zu beheben, kann man den setValueAt der Tabelle erweitern ()-Methode, um sicherzustellen, dass der benutzerdefinierte Renderer auf den aktualisierten Zellenwert angewendet wird. Hier ist ein Beispiel:

table.setValueAt(newValue, rowIndex, columnIndex);
((TableModel) table.getModel()).fireTableCellUpdated(rowIndex, columnIndex);
Nach dem Login kopieren

Alternativ kann man einen benutzerdefinierten CellEditor erstellen, der den benutzerdefinierten Renderer als Editorkomponente verwendet. Auf diese Weise kann der Editor die benutzerdefinierte Formatierung während der Bearbeitung auf den Wert anwenden und der Renderer kann den formatierten Wert nach Abschluss der Bearbeitung anzeigen.

Beispiel

Die Der folgende Code demonstriert einen benutzerdefinierten Währungseditor, der einen Währungsrenderer verwendet:

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;
    }
}
Nach dem Login kopieren
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);
    }
}
Nach dem Login kopieren

Anhand der bereitgestellten Beispiele können Sie den benutzerdefinierten beibehalten Zellrendering nach Zellbearbeitung in einer JTable.

Das obige ist der detaillierte Inhalt vonWie bleibt das benutzerdefinierte JTable-Zellen-Rendering nach der Bearbeitung erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage