Добавление JComboBox в ячейку JTable
Возможный дубликат:
Как добавить JComboBox в ячейку JTable?
Мне трудно добавить JComboBox
к одной из клеток JTable
Я попробовал код ниже, но он не работает..
Как я могу добавить jcombobox к определенной ячейке?
По нажатию enter
новый jcombobox
должен быть добавлен автоматически в нужный столбец.
jTable1 = new javax.swing.JTable();
mod=new DefaultTableModel();
mod.addColumn("No");
mod.addColumn("Item ID");
mod.addColumn("Units");
mod.addColumn("Amount");
mod.addColumn("UOM");
mod.addColumn("Delivery Date");
mod.addColumn("Total Amount");
mod.addColumn("Notes");
mod.addColumn("Received");
mod.addRow(new Object [][] {
{1, null, null, null, null, null, null, null, null}
});
jTable1.setModel(mod);
jTable1.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(generateBox()));
jTable1.setColumnSelectionAllowed(true);
Code to generate ComboBox
private JComboBox generateBox()
{
JComboBox bx=null;
Connection con=CPool.getConnection();
try
{
Statement st=con.createStatement();
String query="select distinct inid from inventory where company_code="+"'"+ims.MainWindow.cc+"'";
ResultSet rs=st.executeQuery(query);
bx=new JComboBox();
while(rs.next()){
bx.addItem(rs.getString(1));
}
CPool.closeConnection(con);
CPool.closeStatement(st);
CPool.closeResultSet(rs);
}catch(Exception x)
{
System.out.println(x.getMessage());
}
return bx;
}
2 ответа
Посмотрите на эту ссылку, это поможет вам
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html
и код:
JComboBox
добавлен в JTable
расширяя DefaultCellEditor
Пример:
TableColumn comboCol1 = table.getColumnModel().getColumn(0);
comboCol1.setCellEditor(new CustomComboBoxEditor());
/**
Custom class for adding elements in the JComboBox.
*/
public class CustomComboBoxEditor extends DefaultCellEditor {
// Declare a model that is used for adding the elements to the `Combo box`
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) {
// Add the elements which you want to the model.
// Here I am adding elements from the orderList(say) which you can pass via constructor to this class.
model.addElement(orderList.get(i));
//finally return the component.
return super.getTableCellEditorComponent(table, value, isSelected, row, column);
}
}
Используя пользовательский класс для создания компонентов в JTable, вы можете лучше контролировать содержимое, которое вы показываете.