AbstractTableModel setValueAt不会在Jbutton Click上触发

时间:2011-04-05 13:09:51

标签: java swing tablemodel

我有一个扩展AbstractTableModel的自定义TableModel。

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);
}

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:4)

我认为你的按钮在桌子外面。

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

简而言之:

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

将始终提交尚未输入的值。

答案 1 :(得分:1)

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

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