2009-07-14 29 views
0

我有一個表格模型,它由每隔xx秒更新一次的活動(外部)數據源填充。數據顯示在JTable中。使用實時數據更改JTable編輯器

用戶可以通過擴展AbstractCellEditor的celleditor覆蓋表格單元格中的數據。如果用戶點擊,代碼將檢查新值是否等於表模型中的值。如果沒有,它會認爲它是一個覆蓋。

問題是,比如你點擊一個字段,不改變值,並且外部數據源在此期間更新表模型,代碼認爲用戶使用舊值設置覆蓋而不是僅僅取消覆蓋。

這樣做的標準邏輯和實現是什麼?

回答

0

如何檢測用戶是否有 進行了更改?

我做了一個類,我調用TableCellListener,它偵聽通過單元格編輯器所做的更改。它會在單元格開始編輯之前獲取該值的一個副本,並在停止編輯之後將其與單元格的值進行比較。聽起來這可能是你想要的。

另一種解決方案可能是檢查表格當前是否正在編輯單元格,然後在後臺更新TableModel。也許你彈出一個對話框讓用戶有機會接受更新或取消它。

0

您的表模型應該保持狀態,指示表格單元是否在逐個鍾基礎上被重寫。如果你不這樣做,你也會遇到這樣的問題:用戶覆蓋一個單元格,並且實時數據進入並更改爲使用的相同值。然後,您將取消該重寫。

您可以在TableModel中的覆蓋setValueAt(Object,int,int)方法中填充此狀態。當您的AbstractCellEditor完成編輯時,此方法將被JTable調用。