【问题标题】:ComboBox does not refresh, when data changes in JTable当 JTable 中的数据发生变化时,ComboBox 不刷新
【发布时间】:2015-05-21 22:04:55
【问题描述】:

我正在尝试开发一个小应用程序,其中有一个 JComboBox,它在开始时使用一些元素进行初始化,从 JTable 中检索。由于插入的数据不同,JTable 会不断变化。

但是,每当我向数据库中插入或删除新数据时,组合框都不会更新,只有在我关闭程序并打开它时才会更新。 谁能给我一个提示/帮助我做错了什么。

这是我的代码:

private void fillcombopart() {

        try {
            String sql = "select * from partrepair";
            conn = DriverManager.getConnection("jdbc:sqlite:C:\\database.db");
            PreparedStatement pst = conn.prepareStatement(sql);
            ResultSet rs = pst.executeQuery();
             DefaultComboBoxModel model12 = new DefaultComboBoxModel();

             while (rs.next()) {

     model12.addElement(rs.getString("Name"));
    model12.addListDataListener(partCombo);
} 
partCombo.setModel(model12);
               // partCombo.addItem(rs.getString("Name"));


            pst.close();
            rs.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

数据库的更新方法

public void refresh2() {
        try {
            String sql12 = "select * from partrepair";
            conn = DriverManager.getConnection(s);
            PreparedStatement pst12 = conn.prepareStatement(sql12);
            ResultSet rs = pst12.executeQuery();
            tablerepair.setModel(DbUtils.resultSetToTableModel(rs));
            pst12.close();
            rs.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

【问题讨论】:

  • 没有多少数据库提供监听变化的机制。您最好的选择是提供一种方法,您可以通过该方法自动或手动检查数据库并相应地更新组合框的内容......
  • 我为我的 jtable 提供了一个更新方法,它会在数据库更改时更新 jtable

标签: java swing jtable refresh jcombobox


【解决方案1】:

如果我没记错的话,您只检查一次数据库。尝试使用分离线程。

【讨论】:

    【解决方案2】:

    每当我将新数据插入或删除数据库时,组合框不会更新,只有当我关闭程序并打开它时。谁能给我一个提示/帮助我做错了什么。

    您似乎只设置了一次 JComboBox 的模型,之后就不再更新它,或者如果您这样做了,您就不会向我们展示。模型不会变魔术——如果数据库的数据发生变化,您必须编写代码来更改它。这意味着您必须以某种方式监听数据库的更改,然后在发生这种情况时更新您的 JComboBox 模型。

    【讨论】:

    • 我添加了model12.addListDataListener(partCombo);,它应该监听变化,但我将如何更新它
    • @jayd:这让我很困惑——要求 JComboBox 的模型监听同一个 JComboBox——没有意义,而且肯定不会收到来自数据库重新更改的通知。你可以考虑使用Beans-Binding
    • 还有其他方法吗?
    猜你喜欢
    • 1970-01-01
    • 2019-01-06
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2022-10-24
    • 1970-01-01
    相关资源
    最近更新 更多