前の質問では、JTable 列を文字列としてフォーマットすることに焦点を当てていましたが、ソート機能は double として使用されていました。この議論の後、新しい疑問が生じます: セルの値を編集した後、セルのレンダリングを保持するにはどうすればよいですか?
具体的には、問題はカスタム セル レンダラを使用してセルをフォーマットし、その後 JTextField エディタを実装した後です。 、セルを編集すると、カスタム レンダラーの書式設定が失われます。ここで疑問が生じます: レンダラーは最初のデータ表示後にセルのレンダリングを続行するつもりはないのでしょうか?
幸いなことに、これはレンダラーが機能しないという問題ではありません。期待される。鍵となるのは、テーブルの編集プロセスを理解することです。編集が完了すると、テーブルの editStopped() メソッドは 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 中国語 Web サイトの他の関連記事を参照してください。