2015-01-22 5 views
0

Я пытаюсь добавить JComboBox в ячейку JTable. После addding в JComboBox в векторе строкЯ пытаюсь добавить JComboBox в JTable Cell,

Vector rown=new Vector(); 
rown.add(comboBox1); 

и запустить свой графический интерфейс, таблица показывает:

javax.swing.JComboBox[,0,0,0x0,invalid,layout=javax.swing.plaf.metal.MetalComboBoxUI$MetalComboBoxLayoutManager,alignmentX=0.0,alignmentY=0.0,border=,flags=16777536,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=VALUE_ONE 

Вместо VALUE_ONE в JComboBox.

Куда я ошибаюсь?

+4

См [Концепции: редакторы и рендерерами] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender). Вам не нужно добавлять поле со списком в модель таблицы, но вместо этого предоставлять правильный редактор/рендер. – dic19

+1

Также [* Использование Combo Box в качестве редактора *] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#combobox). –

ответ

0
TableColumn comboCol1 = table.getColumnModel().getColumn(0); 
comboCol1.setCellEditor(new CustomComboBoxEditor()); 

public class CustomComboBoxEditor extends DefaultCellEditor { 
private DefaultComboBoxModel model; 

public CustomComboBoxEditor() { 
    super(new JComboBox()); 
    this.model = (DefaultComboBoxModel)((JComboBox)getComponent()).getModel(); 
} 

@Override 
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { 
    model.addElement(orderList.get(i)); 
} 


    return super.getTableCellEditorComponent(table, value, isSelected, row, column); 
} 
} 
+1

Почему подклассификация DefaultCellEditor? Существует [конструктор класса удобства] (http://docs.oracle.com/javase/8/docs/api/javax/swing/DefaultCellEditor.html#DefaultCellEditor-javax.swing.JComboBox-), который принимает JComboBox в качестве аргумента, поэтому мы вообще не должны подклассы. – dic19

Смежные вопросы