在单元格编辑后维护 JTable 单元格渲染
在 JTable 中,实现自定义单元格渲染和编辑功能可以增强用户体验。然而,确保即使在编辑操作后仍保留所需的格式至关重要。
问题
设置自定义单元格渲染器以格式化“价格”后列中,用户遇到了一个差异,即单元格编辑时数字格式丢失。在这种情况下,提交编辑后可能不会应用单元格渲染器的默认值。
解决方案
要在单元格编辑后保持自定义渲染,使用正确的事件触发器和类非常重要。当编辑结束时,JTable 的 EditingStopped() 方法通过 getCellEditorValue() 收集新值。然后使用 setValueAt() 通知模型,并随后调用 fireTableCellUpdated()。这个综合过程调用渲染器,可以扩展它来处理特殊的格式需求。
其他注意事项
对于更复杂的格式要求,建议考虑使用实例自定义渲染器作为编辑器组件本身。这样可以更好地控制单元格的外观和行为,即使在单元格修改后也能确保格式一致。
示例
以下代码片段提供了一个示例实现,演示了如何将 JTable 单元格中的货币值格式化为数字。自定义渲染器 (CurrencyRenderer) 处理货币格式,而自定义编辑器 (CurrencyEditor) 允许用户在保持格式的同时编辑值。
import java.awt.Component; import java.awt.event.MouseEvent; import java.text.NumberFormat; import javax.swing.DefaultCellEditor; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableCellRenderer; // Custom cell renderer for currency formatting public class CurrencyRenderer extends DefaultTableCellRenderer { private NumberFormat formatter; public CurrencyRenderer(NumberFormat formatter) { this.formatter = formatter; setHorizontalAlignment(JLabel.RIGHT); } @Override public void setValue(Object value) { setText((value == null) ? "" : formatter.format(value)); } } // Custom cell editor for currency input, maintaining the formatting public class CurrencyEditor extends DefaultCellEditor { private NumberFormat formatter; private JTextField textField; public CurrencyEditor(NumberFormat formatter) { super(new JTextField()); this.formatter = formatter; textField = (JTextField) 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) ? "" : formatter.format((Double) value)); return textField; } }
通过合并这些技术,开发人员可以确保自定义单元格渲染和编辑功能在 JTable 中无缝协作,提供一致且用户友好的数据操作体验。
以上是如何在单元格编辑后维护自定义 JTable 单元格渲染?的详细内容。更多信息请关注PHP中文网其他相关文章!