2011-06-17 29 views
0

JTableでCellRendererとしてJComboBoxを使用しています。
JComboBoxがすべて対応していれば、対応する行の正しい項目が表示されます。JComboBoxがCellRendererとして正しい値を設定していません

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

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

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

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

+0

レンダラの実装が間違っている可能性があります。表示できますか? –

+0

ここでレンダラの実装を見ることができます:http://pastebin.com/Qg3Jf3C7 – mhmpl

答えて

2

レンダラーのソースコードを見てください。

  1. 私はあなたが名前で製品を検索する必要はないと思います。 がに渡された製品はです(正しく実装されている場合)。 valueを選択した項目に設定するだけで正常に機能します。

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

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

1

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

関連する問題