问题描述
我想用JCombobox创建一个JTable。 在该JTable 3列中,JComboBox具有不同的数据。 我尝试通过DefaultCellEditor,但是所有JCombobox具有相同的数据。
任何人都可以帮助我实现同样的目标。
提前致谢。
public class CustomComboEditor extends DefaultCellEditor {
private DefaultComboBoxModel model;
private DefaultComboBoxModel model1;
private DefaultComboBoxModel model2;
public CustomComboEditor() {
super(new JComboBox());
this.model = (DefaultComboBoxModel) ((JComboBox) getComponent()).getModel();
this.model1 = (DefaultComboBoxModel) ((JComboBox) getComponent()).getModel();
this.model2 = (DefaultComboBoxModel) ((JComboBox) getComponent()).getModel();
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int col) {
try {
model.removeAllElements();
model.addElement("");
String sql = "select query 1";
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
while (rs.next()) {
model.addElement(rs.getString(1));
}
model1.removeAllElements();
model1.addElement("");
String sql1 = "select query 2";
pst = conn.prepareStatement(sql1);
rs = pst.executeQuery();
while (rs.next()) {
model1.addElement(rs.getString(1));
}
/*model2.removeAllElements();
model2.addElement("");
model2.addElement("Male");
model2.addElement("Female");*/
} catch (SQLException ex) {
Logger.getLogger(Order_Enquiry.class.getName()).log(Level.SEVERE, null, ex);
}
return super.getTableCellEditorComponent(table, value, isSelected, row, col);
}
}
1楼
this.model = (DefaultComboBoxModel) ((JComboBox) getComponent()).getModel();
this.model1 = (DefaultComboBoxModel) ((JComboBox) getComponent()).getModel();
this.model2 = (DefaultComboBoxModel) ((JComboBox) getComponent()).getModel();
model
, model1
和model2
是指向同一对象的 3个引用。
因此,当您运行model1.removeAllElements();
您将删除之前刚刚存储的所有元素。
但是一个单一的模型可能很好。 问题是当前您正在运行完全相同的查询,而不管您在表中的位置如何,因此您不希望在不同的单元格中具有不同的组合框条目。 相反,您应该有一些类似的东西:
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int col) {
model.removeAllElements();
model.addElement("");
if(col==0){
// Prepare query 1
sql = ...
}else if(col==1){
// Prepare query 2
sql = ...
}else
...
// run query
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
// Fill the model
while (rs.next()) {
model.addElement(rs.getString(1));
}
return super.getTableCellEditorComponent(table, value, isSelected, row, col);
}