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

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

Susan Sarandon
リリース: 2024-11-30 19:42:11
オリジナル
310 人が閲覧しました

How to Preserve Custom JTable Cell Rendering After Editing?

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

JTable セルのカスタム レンダリング形式 (通貨形式など) が変更される状況が発生する場合があります。セル編集後に失われます。この問題は、デフォルトでは編集プロセスがカスタム レンダラをバイパスしてテーブル モデルを直接更新するために発生します。

解決策

これを解決するには、テーブルの setValueAt を拡張します。 () メソッドを使用して、カスタム レンダラーが更新されたセル値に確実に適用されるようにします。以下に例を示します。

table.setValueAt(newValue, rowIndex, columnIndex);
((TableModel) table.getModel()).fireTableCellUpdated(rowIndex, columnIndex);
ログイン後にコピー

あるいは、カスタム レンダラーをエディター コンポーネントとして利用するカスタム CellEditor を作成することもできます。これにより、エディターは編集中にカスタム書式設定を値に適用でき、レンダラーは編集完了後に書式設定された値を表示できます。

次のコードは、CurrencyRenderer を使用するカスタム CurrencyEditor を示しています。

public class CurrencyEditor extends DefaultCellEditor {

    private JTextField textField;

    public CurrencyEditor() {
        super(new JTextField());
        textField = (JTextField) this.getComponent();
        textField.setHorizontalAlignment(JTextField.RIGHT);
        textField.setBorder(null);
    }

    @Override
    public Object getCellEditorValue() {
        try {
            return new Double(textField.getText());
        } catch (NumberFormatException e) {
            return Double.valueOf(0);
        }
    }

    @Override
    public Component getTableCellEditorComponent(JTable table,
        Object value, boolean isSelected, int row, int column) {
        textField.setText((value == null) ? "" : CurrencyRenderer.format(value));
        return textField;
    }
}
ログイン後にコピー
public class CurrencyRenderer extends DefaultTableCellRenderer {

    private static DecimalFormat formatter = new DecimalFormat("$###,##0.00");

    public CurrencyRenderer() {
        this.setHorizontalAlignment(JLabel.RIGHT);
    }

    @Override
    public void setValue(Object value) {
        setText((value == null) ? "" : formatter.format(value));
    }

    public static String format(Object value) {
        return formatter.format(value);
    }
}
ログイン後にコピー

By提供された例を使用すると、JTable でセルを編集した後もカスタム セルのレンダリングを維持できます。

以上が編集後にカスタム JTable セルのレンダリングを保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート