質問

私はjtableでjcomboboxをセルレンダーとして使用しています。
すべてが正常に動作するJComboBoxは、対応する行の正しいアイテムを表示します。

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

JComboBoxを拡張し、TableCellRendererを実装するドロップダウンセルレンダークラスを作成しましたが、それで十分だと思いましたが、DropdownCellRenderer-Objectはすべての行で同じようです。

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

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

役に立ちましたか?

解決

レンダラーのソースコードを調べました。

  1. 名前で製品を調べる必要はないと思います。 value あなたに渡されました テーブルモデルから来ている製品(正しく実装されている場合)。を設定するだけです value 選択したアイテムとして、それは機能するはずです。

  2. レンダラーを正しく振る舞わせるには、次のように前景と背景の色を変更します isSelected パラメーター。コードは次のように見えます。

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

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top