2009-11-17 66 views
0

我正在用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(); 
    } 


} 

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

+0

备案:这是一个无效的实现CellEditor中的 - 当终止编辑它_must_通知其监听器内部原因! – kleopatra 2012-09-11 07:05:41

回答

2

取决于一些后处理我 可能会重置的单元格的值。

如果您希望重写stopCellEditing()方法,您可以在单元格编辑器中正确执行此操作。

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

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

所以最好在 细胞失去焦点编辑

我,你或许应该加上TableModelListener到TableModel的其他建议,同意后,会出现这种情况。虽然取决于你的要求,你可能要考虑使用Table Cell Listener

+0

我其实很喜欢你在链接上放置的TableCellListener例子。但我的环境是Java 1.5,所以实际上我不能使用该实用程序,因为“convertRowIndexToModel”在1.5中不可用。有没有解决方法? – Chantz 2009-11-17 17:46:59

+0

另外,虽然我们在它,有没有办法禁用某些列的这种行为? – Chantz 2009-11-17 19:41:28

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 { ........ 
相关问题