如何从 ArrayList 填充 JComboBox
How to Populate JComboBox from ArrayList
我正在尝试使用 ArrayList
和 DefaultComboBoxModel
从 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);
}
}
和获取方法,
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
一些时间。那么我该如何解决呢?
这个
sometext@716a1
是具体 class 实例的唯一 identifier/memory 地址。
你看到那个是因为你没有正确覆盖
public String toString();
方法,针对Combo
class.
此外,DefaultComboBoxModel
是一个通用的启用 class
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);
}
我正在尝试使用 ArrayList
和 DefaultComboBoxModel
从 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);
}
}
和获取方法,
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
一些时间。那么我该如何解决呢?
这个
sometext@716a1
是具体 class 实例的唯一 identifier/memory 地址。
你看到那个是因为你没有正确覆盖
public String toString();
方法,针对Combo
class.
此外,DefaultComboBoxModel
是一个通用的启用 class
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);
}