在JTable中编辑单元格时提供其他行为

我正在用Java创建一个应用程序。 在编辑JTable中的单元格时,我需要提供其他行为。 理想情况下,当编辑后细胞失去焦点时会发生这种情况。 根据一些后期处理,我可能会重置单元格的值。 我尝试使用单元格编辑器,但它没有给我所需的行为。

在默认的JTable中,只有当我双击一个单元格时,它才变得可编辑。 但是在我的CellEditor实现中,细胞一旦成为焦点就变得可编辑。

这是My custom CellEditor的代码,

public class ParameterDefinitionEditor extends AbstractCellEditor implements TableCellEditor{ private JTable table; private DefaultTableModel defaultTableModel; public ParameterDefinitionEditor(DefaultTableModel defaultTableModel, JTable table) { super(); this.table = table; this.defaultTableModel = defaultTableModel; TableColumnModel columnModel = table.getColumnModel(); columnModel.getColumn(0).setCellEditor(this); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { if (isSelected) { // Do some processing. } ((JTextField)component).setText((String)value); // Return the configured component return component; } public Object getCellEditorValue() { return ((JTextField)component).getText(); } } 

任何帮助将不胜感激。 谢谢。

根据一些后期处理,我可能会重置单元格的值。

如果您希望通过覆盖stopCellEditing()方法,可以在单元格编辑器中执行此操作。

在默认的JTable中,只有当我双击一个单元格时,它才变得可编辑。 但是在我的CellEditor实现中,细胞一旦成为焦点就变得可编辑。

扩展DefaultCellEditor。 这由setClickCountToStart()方法控制。

理想情况下,当编辑后细胞失去焦点时会发生这种情况

我同意你应该将TableModelListener添加到TableModel的另一个建议。 虽然根据您的要求,您可能需要考虑使用表格单元侦听器 。

我不认为通过提供自定义单元格编辑器满足您的目的。

如果您想根据用户操作进行一些处理,那么您的表模型应具有
一组侦听器(实现TableModelListener)并且应该放置您的逻辑
在“tableChanged”方法中。

请查看Swing教程中的这一部分:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

我通过重写stopCellEditing实现了这种行为(我使用AbstractCellEditor的自定义实现)

 public boolean stopCellEditing() { String s = (String) getCellEditorValue(); if ( ! valueValidator.isValid(s) ) { editorComponent.setBorder(new LineBorder(Color.red)); Toolkit.getDefaultToolkit().beep(); return false; } } else { ........