简体   繁体   English

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

[英]Create more JCombobox in JTable with different values?

I want to create a JTable with JCombobox. 我想用JCombobox创建一个JTable。 In that JTable 3 columns having JComboBox with different data. 在该JTable 3列中,JComboBox具有不同的数据。 I tried through DefaultCellEditor, but all the JCombobox having the same data. 我尝试通过DefaultCellEditor,但是所有JCombobox具有相同的数据。

Can anyone Help me to achieve the same. 任何人都可以帮助我实现同样的目标。

Thanks in Advance. 提前致谢。

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();

model , model1 and model2 are 3 references pointing to the same object . modelmodel1model2是指向同一对象的 3个引用。 So when you run model1.removeAllElements(); 因此,当您运行model1.removeAllElements(); you are removing all the elements you just stored previously. 您将删除之前刚刚存储的所有元素。

But one single model is probably fine. 但是一个单一的模型可能很好。 The problem is currently you are running the exact same queries, regardless of where you are in the table, so you can't hope to have different combobox entries in different cells. 问题是当前您正在运行完全相同的查询,而不管您在表中的位置如何,因此您不希望在不同的单元格中具有不同的组合框条目。 Instead you should have something more or less like: 相反,您应该有一些类似的东西:

@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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM