2011-04-05 62 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