在單元格編輯後維護JTable 單元格渲染
人們可能會遇到JTable 單元格的自訂渲染格式(例如,貨幣格式)的情況儲存格編輯後遺失。出現此問題的原因是預設情況下,編輯過程會繞過自訂渲染器直接更新表格模型。
解決方案
要解決此問題,可以擴展表的 setValueAt () 方法以確保自訂渲染器應用於更新的單元格值。以下是一個範例:
table.setValueAt(newValue, rowIndex, columnIndex); ((TableModel) table.getModel()).fireTableCellUpdated(rowIndex, columnIndex);
或者,可以建立一個自訂 CellEditor,利用自訂渲染器作為其編輯器元件。透過這樣做,編輯器可以在編輯期間將自訂格式套用到該值,渲染器可以在編輯完成後顯示格式化的值。
範例
以下程式碼示範了使用CurrencyRenderer的自訂CurrencyEditor:
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); } }
透過使用提供的範例,您可以使用提供的範例,您可以使用提供的範例,您可以使用提供的範例,您可以使用提供的範例,您可以使用提供的範例,您可以使用提供的範例,您可以使用提供的範例,您可以使用提供的範例,您可以使用提供的範例,您可以使用提供的範例,您可以使用提供的範例,您可以使用提供的範例,您可以使用。在JTable 中編輯單元格後維護自訂單元格渲染。
以上是如何在編輯後保留自訂 JTable 單元格渲染?的詳細內容。更多資訊請關注PHP中文網其他相關文章!