ホームページ >Java >&#&チュートリアル >セル編集後にカスタム JTable セルのレンダリングを保持するにはどうすればよいですか?

セル編集後にカスタム JTable セルのレンダリングを保持するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-06 12:00:32626ブラウズ

How to Preserve Custom JTable Cell Rendering After Cell Editing?

セル編集後の JTable セル レンダリングの維持

前の質問では、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。