在JTable中编辑单元格时提供额外的行为
我正在用Java创建一个应用程序。在编辑JTable中的单元格时,我需要提供其他行为。所以理想情况下,当编辑后单元失去焦点时会发生这种情况。根据一些后处理,我可能会重置单元格的值。我尝试使用一个单元格编辑器,但它没有给我所需的行为。在JTable中编辑单元格时提供额外的行为
仅当我双击单元格时,才会在默认的JTable中变为可编辑。但是在我的CellEditor实现中,单元格一旦焦点就变得可编辑。
这里是我的自定义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的其他建议,同意后,会出现这种情况。虽然取决于你的要求,你可能要考虑使用Table Cell Listener。
我不认为通过提供自定义单元格编辑服务您的目的。
如果你想要做的基于用户行为进行一些处理,然后你的表格模型应该有
一组听众(实现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 { ........
备案:这是一个无效的实现CellEditor中的 - 当终止编辑它_must_通知其监听器内部原因! – kleopatra 2012-09-11 07:05:41