【问题标题】:Items in combobox reduced after adding actionPerformed添加 actionPerformed 后组合框中的项目减少
【发布时间】:2020-05-02 18:14:38
【问题描述】:

我想在单击组合框中的不同项目后立即更新我的表格。添加 actionPerformed 组合框后仅显示第一项,箭头不起作用。选择不同的项目并单击按钮后,我正在更新我的表格。在按钮中执行的操作确实有效。我是否错误地使用了 actionPerformed?

这是我如何将项目添加到组合框的代码。

private void fillComboBox() {       
    try {
        DatabaseMetaData meta = (DatabaseMetaData) conn.getMetaData();
        rs = meta.getTables("db", null, null, new String[] {
          "TABLE"
        });
        while (rs.next()) {
            ComboBox.addItem(rs.getString("TABLE_NAME"));
        }            
    } catch(Exception e) {
        JOptionPane.showMessageDialog(null,e);         
    }
}

这是我填表的方式。

private void fillTable()
{
    String selectedValue = ComboBox.getSelectedItem().toString();
    String sql = "Select * from "+selectedValue;
    Statement stmt;
    try {
        stmt = conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE,rs.CONCUR_UPDATABLE);
        rs = stmt.executeQuery(sql);
        Table.setModel(DbUtils.resultSetToTableModel(rs));
    } catch (SQLException ex) {
        Logger.getLogger(Welcome.class.getName()).log(Level.SEVERE, null, ex);
    }       
}

点击按钮后,我更新表格

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    fillTable();
}  

工作正常,但我想在单击组合框中的新项目后立即更新表格。

编辑:我通过在 fillTable() 之后添加 fillComboBox() 来修复它。但是现在我在组合框中有两个第一个项目,即使在 removeAll() 之后也是如此。我该如何解决?

public Welcome() {
    initComponents();
    conn = MySqlConnect.ConnectDB();
    fillComboBox();
    fillTable();
    ComboBox.removeAll();
    fillComboBox();
    repaint();
}

【问题讨论】:

    标签: java mysql netbeans combobox


    【解决方案1】:

    我总是使用底层模型动态更改 ComboBox 的内容,而不是通过实际的 ComboBox。在您的 GUI 已经显示之后,我认为这很重要......使用模型,而不是 JComboBox 本身。

    ...
    final var model = new DefaultComboBoxModel<String>();
    while (rs.next()) {
        model.addElement(rs.getString("TABLE_NAME"));
    }
    ...
    ComboBox.setModel(model);
    

    【讨论】:

    • 顺便说一下,Capital C ComboBox 是一个奇怪的变量名选择。但是我将我会做的事情放到你的语法中,这样你就可以看到我在那里做了什么。
    • 不幸的是,它不起作用。我添加了 DefaultComboBoxModel model = new DefaultComboBoxModel() intsead of final var model...由于 netbeans realese 10,我无法使用 var。我收到错误 NullPointerException。
    • 也许其他人知道。但我自己总是与模型一起工作。在构建并使用 JComboBox 之后,我只需抓取模型并像数组列表一样使用它,它对我来说总是比 JComboBox 方法更稳定。祝你好运。
    • 我想知道为什么它对我不起作用。我会仔细看看的。非常感谢您的帮助!
    猜你喜欢
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多