我正在用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();
}
}
任何帮助将不胜感激。感谢。
答案 0 :(得分:2)
取决于一些后期处理我 可能会重置单元格的值。
如果您希望通过覆盖stopCellEditing()方法,可以在单元格编辑器中执行此操作。
仅在我的默认JTable中 双击它成为的单元格 编辑。但在我的实施中 CellEditor细胞变得可编辑 一旦它成为焦点。
扩展DefaultCellEditor。这由setClickCountToStart()方法控制。
理想情况下,这将发生在 编辑后,单元格失去焦点
我同意另一个建议,你应该将TableModelListener添加到TableModel。虽然根据您的要求,您可能需要考虑使用Table Cell Listener。
答案 1 :(得分:1)
我不认为通过提供自定义单元格编辑器满足您的目的。
如果您想根据用户操作进行一些处理,那么您的表格模型应该有 一组监听器(实现TableModelListener),你的逻辑应该被放入 在“tableChanged”方法中。
在Swing教程中查看此部分:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
答案 2 :(得分:1)
我通过覆盖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 { ........