Как заполнить JComboBox из ArrayList - PullRequest
1 голос
/ 23 марта 2019

Я пытаюсь извлечь некоторые значения из базы данных MySQL в JComboBox, используя ArrayList и DefaultComboBoxModel, чтобы избежать выборки повторяющихся значений.Поскольку 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() ранее (до добавления этого кода), а затем получить значения.Но это дает мне NullPointerException несколько раз.Так как я могу это исправить?

1 Ответ

2 голосов
/ 23 марта 2019

Этот

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