我有一個表格模型,它由每隔xx秒更新一次的活動(外部)數據源填充。數據顯示在JTable
中。使用實時數據更改JTable編輯器
用戶可以通過擴展AbstractCellEditor
的celleditor覆蓋表格單元格中的數據。如果用戶點擊,代碼將檢查新值是否等於表模型中的值。如果沒有,它會認爲它是一個覆蓋。
問題是,比如你點擊一個字段,不改變值,並且外部數據源在此期間更新表模型,代碼認爲用戶使用舊值設置覆蓋而不是僅僅取消覆蓋。
這樣做的標準邏輯和實現是什麼?
我有一個表格模型,它由每隔xx秒更新一次的活動(外部)數據源填充。數據顯示在JTable
中。使用實時數據更改JTable編輯器
用戶可以通過擴展AbstractCellEditor
的celleditor覆蓋表格單元格中的數據。如果用戶點擊,代碼將檢查新值是否等於表模型中的值。如果沒有,它會認爲它是一個覆蓋。
問題是,比如你點擊一個字段,不改變值,並且外部數據源在此期間更新表模型,代碼認爲用戶使用舊值設置覆蓋而不是僅僅取消覆蓋。
這樣做的標準邏輯和實現是什麼?
如何檢測用戶是否有 進行了更改?
我做了一個類,我調用TableCellListener,它偵聽通過單元格編輯器所做的更改。它會在單元格開始編輯之前獲取該值的一個副本,並在停止編輯之後將其與單元格的值進行比較。聽起來這可能是你想要的。
另一種解決方案可能是檢查表格當前是否正在編輯單元格,然後在後臺更新TableModel。也許你彈出一個對話框讓用戶有機會接受更新或取消它。
您的表模型應該保持狀態,指示表格單元是否在逐個鍾基礎上被重寫。如果你不這樣做,你也會遇到這樣的問題:用戶覆蓋一個單元格,並且實時數據進入並更改爲使用的相同值。然後,您將取消該重寫。
您可以在TableModel
中的覆蓋setValueAt(Object,int,int)
方法中填充此狀態。當您的AbstractCellEditor
完成編輯時,此方法將被JTable
調用。