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?
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) { // ... } }
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!