【问题标题】:Create more JCombobox in JTable with different values?在 JTable 中创建更多具有不同值的 JCombobox?
【发布时间】:2015-10-16 00:52:58
【问题描述】:

我想用 JCombobox 创建一个 JTable。在具有不同数据的 JComboBox 的 JTable 3 列中。我尝试通过 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) 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。 2) } catch (SQLException ex) { } 应该是 } catch (SQLException ex) { ex.printStackTrace(); },直到您正确登录为止。 永远不要忽略异常,直到您可以在代码(或代码 cmets)中解释为什么可以安全地忽略它们。在SQLException 的情况下,时间是 ..never.
  • @Andrew Thompson,是的,我接受,但这里它没有显示任何类型的异常(SQL、Normal)。问题是 public CustomComboEditor() { super(new JComboBox()); this.model = (DefaultComboBoxModel) ((JComboBox) getComponent()).getModel(); this.model1 = (DefaultComboBoxModel) ((JComboBox) getComponent()).getModel(); this.model2 = (DefaultComboBoxModel) ((JComboBox) getComponent()).getModel(); },我创建了单个JCombobox,而不是可以使用多个JCombobox,我尝试过,但没有太多运气。
  • "是的,我接受,.." 不要“接受”,edit "..但这里没有显示任何内容有点例外..” 使用该代码,您会感到惊讶吗?!?顺便说一句 - 1) 不要将不可编译的代码 sn-ps 放在它们不可读的 cmets 中。 2) 请按照我的第一个建议采取行动。我现在已经投票关闭,因为缺少建议。
  • "现在我编辑了..." 然而仍然没有 MCVE。靠在这堵墙上就够了。我走了……

标签: java swing jtable


【解决方案1】:
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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多