2011-04-05 171 views
3

我有一个自定义的TableModel来扩展AbstractTableModel。AbstractTableModel setValueAt没有触发Jbutton点击

public class IndicatorPropertyTableModel extends AbstractTableModel 

的setValueAt功能我当你输入一个新值的可编辑的单元格,然后移动到另一个细胞的情况下适当地写了火灾。我遇到的问题是,对于最后一个可编辑的单元格,用户将立即单击一个JButton来继续。这不会触发setValueAt函数,因此不会保存数据。在编辑单元格后用户立即点击按钮时,是否有一种确保此值始终存储的好方法?如果需要的话,setValueAt函数作为参考。

public void setValueAt(Object value, int row, int col) { 
    if (value == null) 
     return; 
    if (col == 0) { 
     //this.indicatorArguments[row].setIsSelected(value); 
    } else if (col == 2) { 
     this.indicatorArguments[row].setValue(value); 
    } 
    this.fireTableCellUpdated(row, col); 
} 

感谢您提供任何帮助。

回答

3

我假设你的按钮不在桌子上。

在事件监听器或按钮的操作中,您需要引用表。这张表你可以询问isEditing是否返回true。然后,您将get the current editor并验证上一个输入值后,请拨打stopCellEditing提交该值或cancelCellEditing撤消该值。

简而言之:

if(table.isEditing()){ 
    table.getCellEditor().stopCellEditing(); 
} 

将一如既往地致力于尚未输入的值。

+0

你的假设是正确的,按钮不在桌子上。提供的代码完美地工作。谢谢! – Judicator 2011-04-05 14:00:16

1

检查表是否正在编辑需要您将代码添加到GUI上的所有按钮。

您可能可以使用简单的一行解决方案来避免这种情况。退房Table Stop Editing