【问题标题】:How to Populate JComboBox from ArrayList如何从 ArrayList 填充 JComboBox
【发布时间】:2019-08-14 11:27:31
【问题描述】:

我正在尝试使用 ArrayListDefaultComboBoxModel 从 MySQL 数据库中获取一些值到 JComboBox 以避免获取重复值。因为当我调用该方法来获取值时,JComboBox 会一次又一次地向 JComboBox 填充相同的值。

目前,当以下代码运行时,组合框会显示这些值,

sometext@24084, sometext@716a1

这是我的代码,

public static void loadAll(JComboBox comboBox) {
        try {
            ArrayList<Combo> comboList = ComboBoxController.getComboType();
            DefaultComboBoxModel dtm = (DefaultComboBoxModel)comboBox.getModel();

            for (Combo combo : comboList) {
                Object[] rowData = {combo.getComboType()};
                dtm.addElement(rowData);
            }
        } catch (SQLException | ClassNotFoundException ex) 
        {
            Logger.getLogger(AllComboBoxMethod.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

和Fetch方法,

int itemCount = combo.getItemCount(); 

for(int i = 1; i < itemCount; i++) { 
    combo.removeItemAt(0); 
}

String sql = "SELECT * FROM combo_type";
dbConnection = DbConnection.getInstance();
con = dbConnection.getConnection();
stm = con.createStatement();
rst = stm.executeQuery(sql);

ArrayList<Combo> comboList = new ArrayList();
while(rst.next()) {
     comboList.add(new Combo(rst.getString(2)));
}
return comboList;

那么我做错了什么?这是避免获取重复值的唯一方法吗?我之前尝试过comboBox.removeAllItems()(在添加此代码之前),然后获取值。但它有时会给我NullPointerException。那么我该如何解决这个问题呢?

【问题讨论】:

  • 您能说明一下您需要解决的问题吗?是否仅用于 String 表示?
  • @LppEdd 主要是我需要避免在一次又一次调用JComboBox fetch方法的时候获取重复值。
  • 这个“获取”方法在哪里?
  • @LppEdd 我已经更新了我的问题。

标签: java swing arraylist jcombobox


【解决方案1】:

这个

sometext@716a1

是具体类实例的唯一标识符/内存地址。
您看到这一点是因为您没有正确覆盖

public String toString();

方法,用于Combo 类。


另外,DefaultComboBoxModel 是一个通用的启用类

DefaultComboBoxModel<E>

那么为什么要使用原始实例?
你应该处理

DefaultComboBoxModel<Combo>

相反。这意味着你可以这样做

for (final Combo combo : comboList) {
   dtm.addElement(combo);
}

试试

public static void loadAll(final JComboBox comboBox) {
    try {
        final List<Combo> comboList = ComboBoxController.getComboType();
        final DefaultComboBoxModel dtm = (DefaultComboBoxModel) comboBox.getModel();

        dtm.removeAllItems();

        for (final Combo combo : comboList) {
            dtm.addElement(combo.getComboType());
        }
    } catch (final SQLException | ClassNotFoundException ex) {
        Logger.getLogger(AllComboBoxMethod.class.getName()).log(Level.SEVERE, null, ex);
    }
}

int itemCount = combo.getItemCount();

for (int i = itemCount - 1; i >= 0; i++) { 
   combo.removeItemAt(0); 
}

【讨论】:

  • 这不是重复了无数类似的问题吗?
  • @HovercraftFullOfEels mmmh 我想了解他是在尝试解决“toString”问题还是还有更多问题。
  • 我试过overriding toString 方法。它像这样向我显示Java.Lang.Object;@546
  • @HasithaMJayawardana 是否显示为 [Ljava.lang.Object;@60438a68 ?前面有一个 [L?
  • @LppEdd 是的 L 在那儿
猜你喜欢
  • 2014-10-02
  • 2010-11-20
  • 2013-03-31
  • 2014-10-03
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多