Heim > Java > javaLernprogramm > Wie bleibt das benutzerdefinierte JTable-Zellenrendering nach der Zellenbearbeitung erhalten?

Wie bleibt das benutzerdefinierte JTable-Zellenrendering nach der Zellenbearbeitung erhalten?

Barbara Streisand
Freigeben: 2024-12-06 12:00:32
Original
631 Leute haben es durchsucht

How to Preserve Custom JTable Cell Rendering After Cell Editing?

Aufrechterhaltung der JTable-Zellenwiedergabe nach der Zellenbearbeitung

In einer früheren Frage lag der Schwerpunkt auf der Formatierung einer JTable-Spalte als Zeichenfolge, jedoch mit Sortierfunktion als Double. Im Anschluss an diese Diskussion stellt sich eine neue Frage: Wie kann das Zellenrendering beibehalten werden, nachdem der Wert der Zelle bearbeitet wurde?

Das Problem besteht insbesondere darin, dass nach der Verwendung eines benutzerdefinierten Zellenrenderers zum Formatieren der Zelle und der anschließenden Implementierung eines JTextField-Editors , geht die Formatierung des benutzerdefinierten Renderers verloren, nachdem die Zelle bearbeitet wurde. Dies wirft die Frage auf: Ist der Renderer nicht dazu gedacht, die Zellen nach der ersten Datenanzeige weiter zu rendern?

Lösung des Problems

Glücklicherweise liegt es nicht daran, dass der Renderer nicht so funktioniert erwartet. Der Schlüssel liegt im Verständnis des Bearbeitungsprozesses der Tabelle. Wenn die Bearbeitung abgeschlossen ist, ruft die Methode „editingStopped()“ der Tabelle den aktualisierten Wert über getCellEditorValue() ab und verwendet ihn für setValueAt() im Modell. Dies wiederum löst fireTableCellUpdated() aus und ruft den vorgeschriebenen Renderer auf. Daher sollte das Überschreiben des Standardrenderers ausreichen, um die Zahlenformatierung beizubehalten.

In Fällen, in denen die Implementierung mehr Flexibilität erfordert, ist die Verwendung einer Instanz des Renderers als Editorkomponente eine praktikable Option. Hier ist ein Beispiel:

// ...

table.setDefaultRenderer(Double.class, new CurrencyRenderer(nf));
table.setDefaultEditor(Double.class, new CurrencyEditor(nf));

// ...

private static class CurrencyEditor extends DefaultCellEditor {

    // ...

    @Override
    public Object getCellEditorValue() {
        // ...
    }

    @Override
    public Component getTableCellEditorComponent(JTable table,
        Object value, boolean isSelected, int row, int column) {
        // ...
    }
}
Nach dem Login kopieren

Bei diesem Ansatz wird der benutzerdefinierte Renderer sowohl zum Rendern der Zellen als auch zum Erleichtern ihrer Bearbeitung verwendet.

Das obige ist der detaillierte Inhalt vonWie bleibt das benutzerdefinierte JTable-Zellenrendering nach der Zellenbearbeitung 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