在JTable中使用不同的值创建更多的JCombobox吗? [英] Create more JCombobox in JTable with different values?

查看:80
本文介绍了在JTable中使用不同的值创建更多的JCombobox吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用JCombobox创建一个JTable.在那个JTable 3列中,JComboBox具有不同的数据.我尝试通过DefaultCellEditor,但是所有JCombobox都具有相同的数据.

I want to create a JTable with JCombobox. In that JTable 3 columns having JComboBox with different data. I tried through DefaultCellEditor, but all the JCombobox having the same data.

任何人都可以帮助我实现同样的目标.

Can anyone Help me to achieve the same.

预先感谢.

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();时,您将删除之前刚刚存储的所有元素.

model, model1 and model2 are 3 references pointing to the same object. So when you run 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);
}

这篇关于在JTable中使用不同的值创建更多的JCombobox吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆