在单元格编辑后维护 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中文网其他相关文章!