4

私はJTable次の列を持っています:

rowNumber | 要素| 量

そして、JButtonクリックされるたびに行を追加します。[要素]列にはJComboBox、データベースの要素で埋められるカスタムセルエディターがあります。しかし、私は次のことをする必要があります:

テーブルの最初の行に次の要素があるJComboBoxとします。Element1Element2Element3

最初の行からElement2を選択してから、JComboBox別の行を追加します。この新しい行は、その中にElement2を表示してはなりませんJComboBox。また、前の(最初の)行には、2番目の行で選択された要素が表示されてはなりません。

4

2 に答える 2

2

このようなカスタムCustomCellEditorを作成します。

final JComboBox<String> comboBox = new JComboBox<String>();
table.getColumnModel().getColumn(1).setCellEditor(new CustomCellEditor(comboBox){
    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
         DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) comboBox.getModel();
         model.removeAllElements();
         {//Add what you need according the row.
             model.addElement("X");
             model.addElement("Y");
             model.addElement("Z");
         }
         return super.getTableCellEditorComponent(table, value, isSelected, row, column);
   }
});
于 2012-05-23T21:08:50.167 に答える
2

の予想されるカーディナリティを知ることは役立つかもしれないと思いますSet<Element>。したがって、@ mKorbelは、この関連する議論を引用して、スケーラビリティの重要な問題を提起します。その場合、質問は、はるかに単純なレンダラーが実行する場合に、を提案List<DefaultCellEditor>ます

ここで、はCellEditorを管理しList<DefaultComboBoxModel<Element>>、現在編集中の行の正しいコンボモデルを選択setModel()し、エディターコンポーネントを呼び出すことができます。新しいテーブル行が追加されるたびに、エディターはに新しい要素を追加し、List必要に応じて既存の要素を調整します。複雑さはO(n 2として成長すると予想されます。ここで、nはのカーディナリティですSet

于 2012-05-24T13:21:11.103 に答える