Я пытаюсь получить некоторые значения из базы данных 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 несколько раз. Итак, как я могу это исправить?
@LppEdd В основном мне нужно избегать получения повторяющихся значений при повторном вызове метода выборки JComboBox.
Где этот метод "выборки"?
@LppEdd Я обновил свой вопрос.




Этот
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 ммм, я пытаюсь понять, пытается ли он решить только проблему «toString» или есть нечто большее.
Я попробовал overriding toString метод. Он показывает мне Java.Lang.Object;@546 вот так.
@HasithaMJayawardana Показывает ли это как [Ljava.lang.Object; @ 60438a68 ? С [L впереди?
@LppEdd Да L там
@HasithaMJayawardana попробуйте код, который я разместил в своем ответе.
@LppEdd dtm.removeAllItems(); дает мне NullPointerException несколько раз.
@HasithaMJayawardana, потому что вы не связали ComboBoxModel с JComboBox, поэтому, когда вы его извлекаете, он равен нулю
@LppEdd Как я могу это сделать? Потому что мне нужно сохранить значение по умолчанию.
@HasithaMJayawardana с помощью конструктора JComboBox или setModel. См. документацию docs.oracle.com/javase/7/docs/api/javax/swing/JComboBox.html
есть ли способ сохранить первый элемент и удалить все остальные? Я пробовал с for loop. Но не сработало.
@HasithaMJayawardana использует цикл for с индексом, начинающимся с 1, и использует метод DefaultComboBoxModel#removeElementAt или JComboBox#removeItemAt
@LppEdd Я пробовал, но не получилось. Я попробовал это int itemCount = combo.getItemCount(); for(int i = 1; i < itemCount; i++) { combo.removeItemAt(0); }
@HasithaMJayawardana подожди, я пойду поужинаю, тогда мы сможем лучше видеть. Опубликуйте весь свой обновленный код
Не могли бы вы уточнить, какую проблему вам нужно решить? Это только для представления String?