有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从ArrayList填充JComboBox

我正在尝试使用ArrayListDefaultComboBoxModel从MySQL数据库获取一些值,以避免获取重复的值。因为当我调用方法获取值时,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);
        }
    }

和获取方法

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()(在添加此代码之前),然后获取值。但是它给了我一些时间。那么我该怎么解决这个问题呢


共 (1) 个答案

  1. # 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); 
    }