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);
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; } }
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); } }
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!