[英]I'm adding an empty row to my JTable (implementing AbstractTableModel). How do I update my model in real time?
好的,我認為標題就是我在這里要問的全部內容。
我的AbstractTableModel
工作正常,當我想添加一個空行時,我使用以下代碼來執行此操作:
public void addRow() {
Object[][] oldData = data;
data = new Object[oldData.length + 1][3];
// Copy old data to new data
for (int x = 0; x < oldData.length; x++) {
data[x] = oldData[x];
}
// Append new row
data[oldData.length] = new Object[] {"", "", false};
fireTableRowsInserted(data.length - 2, data.length - 1);
}
現在,因為我顯示一個空行,我希望用戶編輯它,我認為用戶會。 現在,當用戶進行更改時,如何確保數據保存在我的陣列中? 或者,如果那是不可能的,有什么更好的選擇呢?
好的,我應該解釋一下我想做什么:
我正在從文件加載內容,並顯示為表格。 現在,用戶可以在單擊“ Add Row
按鈕時向表中添加新行。 這將為每次點擊添加1個空行。 (在上圖中是按下按鈕兩次的實例。
現在,我希望用戶可以編輯單元格,然后可能刪除一些行(可能)但是在單擊“ Save Database
按鈕時,表中的更新數據是存儲。
通過比較幾種方法,您可以更好地理解:
在此示例中 ,后台線程或按鈕可以向表中添加新行。 后台線程通過invokeLater()
在EDT上對Runnable
實例進行排序。 它在概念上更容易理解,但也更容易出錯。
SwingWorker
封裝了對共享數據的排序訪問。 API和教程展示了使用publish()
/ process()
更新組件模型的基本方法。 這種優選機制更加健壯和可擴展。
在這個更高級的示例中 ,Swing Timer
控制一個控制一系列SwingWorker
實例的Executor
。
在所有情況下,表格仍然有效。 您可以使用any作為sscce的基礎。
附錄: 你能解釋一下你建議的策略嗎?
我已經更新了示例列表,並在上下文中提出了一些要查找的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.