首页 > 解决方案 > 添加 actionPerformed 后组合框中的项目减少

问题描述

我想在单击组合框中的不同项目后立即更新我的表格。添加 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();
}

标签: javamysqlnetbeanscombobox

解决方案


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

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

推荐阅读