0

JTable で JComboBox を CellRenderer として使用しています。
すべて正常に動作し、JComboBox は対応する行の正しいアイテムを表示します。

私が現在取り組んでいる問題は、JComboBox (たとえば行 9) で新しい値を選択すると値が正しく設定されるが、次の行の値を変更しようとすると JComboBox (たとえば行10) 前の行の値を自動的に設定します。

JComboBox を拡張し、TableCellRenderer を実装する DropDownCellRenderer クラスを作成しました。これで十分だと思いましたが、DropDownCellRenderer オブジェクトはすべての行で同じようです。

table.getColumnModel().getColumn( 3 ).setCellRenderer( new DropDownCellRenderer() );
table.getColumnModel().getColumn( 3 ).setCellEditor( new DefaultCellEditor( new DropDownCellRenderer() ) );

すべての行が同じオブジェクトを使用しないようにするにはどうすればよいですか?

4

2 に答える 2

2

レンダラーのソース コードを確認しました。

  1. 製品を名前で検索する必要はないと思います。value渡されたの、テーブル モデルから取得された製品です (正しく実装されている場合)。value選択した項目を設定するだけで機能します。

  2. レンダラーを正しく動作させるには、パラメータに従って前景色と背景色を変更しisSelectedます。コードは次のようになります。

    if (isSelected) {
        setForeground(table.getSelectionForeground());
        super.setBackground(table.getSelectionBackground());
    } else {
        setForeground(table.getForeground());
        setBackground(table.getBackground());
    }
    
  3. 値の初期配列をコンストラクターの引数にします。これにより、レンダラーがユニバーサル コンボボックス レンダラーに変換されます。

于 2011-06-18T15:37:40.193 に答える
1

テーブルのモデルからではなく、コンボボックス自体に値を保存して表示しているようです。値を設定してコンボボックスの値を保存するときは、モデルを更新する必要があります

于 2011-06-17T17:43:34.807 に答える