当前位置: 首页 > 知识库问答 >
问题:

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

闻人鸿飞
2023-03-14

我想用JComboBox创建一个JTable。在JTable3列中,具有不同数据的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个答案

屈浩波
2023-03-14
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);
}
 类似资料:
  • 001/电视购买/约翰·史密斯/真 002/冰箱购买/让·史密斯/假

  • 问题内容: 我有表SQLite数据库和列,,。行数不断变化(可能增加或减少)。如果我知道每一行的值和行数,是否可以执行一次SQL查询以根据ID更新所有具有不同值的和字段? 例如: SQL查询伪代码: 和是存储和字段的新值的数组。 如果,例如,和包含以下值: …然后查询后的数据库应如下所示: 这可能吗?我现在正在为每个查询更新一行,但是随着行数的增加,它将需要数百个查询。顺便说一下,我正在AIR中做

  • firebase中我的数据库截图 这里我有一个叫做产品的节点。在那里,我有许多子节点。所有这些节点都有一个共同的值叫做产品库存。我需要更新产品内部所有节点的产品库存值。我如何在android Studio(Java)中做到这一点,因为我正在开发一个购物应用程序?需要帮助。 流程是:用户将产品添加到购物车。在购物车里,我有ordernow按钮。因此,当用户现在单击order时,应该从products

  • 问题内容: 我想让imageIcon在每个单元格中以不同的方式显示,但是由于某种原因,当我对其进行编译时,图像不会显示。它显示图像的名称,但是图像本身不显示。这是一张图片。http://i49.tinypic.com/r9ibrn.jpg } 问题答案: 您可以在调用构造函数时传递图像的名称(请阅读)。

  • 问题内容: 我试图了解如何用不同的值更新多行,但我不明白。解决方案无处不在,但对我来说似乎很难理解。 例如,将三个更新更新为1个查询: 我读了一个例子,但我真的不明白如何进行查询。即: 如果在WHERE和IF条件中存在多个条件,我还不太清楚如何执行查询。 问题答案: 您可以这样操作: 我不了解您的日期格式。日期应使用本机日期和时间类型存储在数据库中。

  • 问题内容: 有没有一种方法可以在HQL中创建一个Distinct查询。通过使用“ distinct”关键字或其他某种方法。我不确定distinct是否是HQL的有效键,但是我正在寻找与SQL关键字“ distinct”等效的HQL。 问题答案: 这是我们使用的hql的片段。(名称已更改,以保护身份)