簡體   English   中英

我在我的JTable中添加一個空行(實現AbstractTableModel)。 如何實時更新我的​​模型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM