在上一個問題中,重點是將JTable 列格式化為字串,但將排序功能設為雙精度。經過這個討論,出現了一個新問題:編輯單元格值後如何保留單元格渲染?
具體來說,問題是使用自訂單元格渲染器格式化單元格後,然後實作 JTextField 編輯器,編輯單元格後,自訂渲染器的格式會遺失。這就引出了一個問題:渲染器是否不打算在初始資料顯示後繼續渲染單元格?
幸運的是,這不是渲染器無法正常工作的問題預期的。關鍵在於理解表格的編輯過程。編輯結束時,表格的 EditingStopped() 方法透過 getCellEditorValue() 擷取更新的值,並將其用於模型中的 setValueAt()。這反過來會觸發 fireTableCellUpdated(),呼叫指定的渲染器。因此,覆蓋預設渲染器應該足以維持數位格式。
在實作需要更大彈性的情況下,使用渲染器實例作為編輯器元件是可行的選擇。以下是一個範例:
// ... table.setDefaultRenderer(Double.class, new CurrencyRenderer(nf)); table.setDefaultEditor(Double.class, new CurrencyEditor(nf)); // ... private static class CurrencyEditor extends DefaultCellEditor { // ... @Override public Object getCellEditorValue() { // ... } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { // ... } }
透過採用此方法,自訂渲染器既可用於渲染儲存格又可促進其編輯。
以上是如何在單元格編輯後保留自訂 JTable 單元格渲染?的詳細內容。更多資訊請關注PHP中文網其他相關文章!