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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-07 13:27:131024ブラウズ

How Can I Maintain Custom JTable Cell Rendering After Cell Editing?

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

JTable にカスタム セルのレンダリングおよび編集機能を実装すると、ユーザー エクスペリエンスを向上させることができます。ただし、編集操作後でも目的の書式設定が確実に保持されることが重要です。

問題

「価格」を書式設定するためのカスタム セル レンダラーを設定した後列では、セル編集時に数値形式が失われるという不一致が発生しました。このようなシナリオでは、編集がコミットされた後にセル レンダラのデフォルト値が適用されない可能性があります。

解決策

セルの編集後にカスタム レンダリングを維持するには、適切なイベント トリガーとクラスを利用することが重要です。編集が完了すると、JTable のeditingStopped() メソッドは getCellEditorValue() を介して新しい値を収集します。その後、モデルは setValueAt() で通知され、その後 fireTableCellUpdated() を呼び出す必要があります。この包括的なプロセスは、特別な書式設定のニーズを処理するために拡張できるレンダラーを呼び出します。

その他の考慮事項

より複雑な書式設定要件については、インスタンスの利用を検討することをお勧めします。カスタム レンダラーをエディター コンポーネント自体として使用します。これにより、セルの外観と動作をより詳細に制御できるようになり、セルの変更後でも一貫した書式設定が保証されます。

次のコード スニペットは、その方法を示す実装例を示しています。 JTable セル内の通貨値を数値としてフォーマットします。カスタム レンダラー (CurrencyRenderer) は通貨の書式設定を処理し、カスタム エディター (CurrencyEditor) を使用すると、ユーザーは書式を維持しながら値を編集できます。

import java.awt.Component;
import java.awt.event.MouseEvent;
import java.text.NumberFormat;
import javax.swing.DefaultCellEditor;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableCellRenderer;

// Custom cell renderer for currency formatting
public class CurrencyRenderer extends DefaultTableCellRenderer {

    private NumberFormat formatter;

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

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

// Custom cell editor for currency input, maintaining the formatting
public class CurrencyEditor extends DefaultCellEditor {

    private NumberFormat formatter;
    private JTextField textField;

    public CurrencyEditor(NumberFormat formatter) {
        super(new JTextField());
        this.formatter = formatter;
        textField = (JTextField) 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)
                ? "" : formatter.format((Double) value));
        return textField;
    }
}

これらの技術を組み込むことで、開発者はカスタム セルのレンダリングを確実に行うことができます。編集機能は JTable でシームレスに動作し、一貫したユーザーフレンドリーなデータ操作エクスペリエンスを提供します。

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

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