当前位置: 代码迷 >> java >> 在JTable中使用不同的值创建更多的JCombobox吗?
  详细解决方案

在JTable中使用不同的值创建更多的JCombobox吗?

热度:52   发布时间:2023-07-16 17:35:33.0

我想用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);
    }
}
this.model = (DefaultComboBoxModel) ((JComboBox) getComponent()).getModel();
this.model1 = (DefaultComboBoxModel) ((JComboBox) getComponent()).getModel();
this.model2 = (DefaultComboBoxModel) ((JComboBox) getComponent()).getModel();

modelmodel1model2是指向同一对象的 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);
}
  相关解决方案