在上一个问题中,重点是将 JTable 列格式化为字符串,但将排序功能设置为双精度。经过这个讨论,出现了一个新问题:编辑单元格值后如何保留单元格渲染?
具体来说,问题是使用自定义单元格渲染器格式化单元格后,然后实现 JTextField 编辑器,编辑单元格后,自定义渲染器的格式会丢失。这就引出了一个问题:渲染器是否不打算在初始数据显示后继续渲染单元格?
幸运的是,这不是渲染器无法正常工作的问题预期的。关键在于理解表格的编辑过程。编辑结束时,表的 EditingStopped() 方法通过 getCellEditorValue() 检索更新的值,并将其用于模型中的 setValueAt()。这反过来会触发 fireTableCellUpdated(),调用指定的渲染器。因此,覆盖默认渲染器应该足以维持数字格式。
在实现需要更大灵活性的情况下,使用渲染器实例作为编辑器组件是一个可行的选择。下面是一个示例:
// ... 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) { // ... } }
通过采用这种方法,自定义渲染器既可用于渲染单元格又可促进其编辑。
以上是如何在单元格编辑后保留自定义 JTable 单元格渲染?的详细内容。更多信息请关注PHP中文网其他相关文章!