使用多个对象的数据填充 JComboBox

Populate JComboBox with Multiple Object's Data

如何从对象填充 JComboBox 数据。我需要做的是将数据从对象获取到组合框。下面是我从数据库中查询数据的方式。

  /*Author Class*/

package some;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class Author {

    private int authId;
    private String authName;
    private String authInitals;

    public int getAuthId() {
        return authId;
    }

    public void setAuthId(int authId) {
        this.authId = authId;
    }

    public String getAuthName() {
        return authName;
    }

    public void setAuthName(String authName) {
        this.authName = authName;
    }

    public String getAuthInitals() {
        return authInitals;
    }

    public void setAuthInitals(String authInitals) {
        this.authInitals = authInitals;
    }

        public void getAuth() {
        DBConnection db;
        Connection dbcon;

        try{
            db = new DBConnection();
            dbcon = db.connect();

            Statement s = DBConnection.connect().createStatement();
            ResultSet rs=s.executeQuery("SELECT idAuthor,AuthorName FROM `lms`.`author`");

            if(rs.next()) {
                this.setAuthId(rs.getInt(1));
                this.setAuthName(rs.getString(2));
            }

        } catch(SQLException e) {
            e.printStackTrace();
        }
    }

}
/*end of class*/

这是 netbeans 自动生成的代码:

cmbxAuth1.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            cmbxAuth1MouseClicked(evt);
        }
    });
    cmbxAuth1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            cmbxAuth1ActionPerformed(evt);
        }
    });
jPanelUpdateBooks.add(cmbxAuth1, new org.netbeans.lib.awtextra.AbsoluteConstraints(150, 240, 350, 30));
    cmbxAuth1 = new javax.swing.JComboBox<>();

从 UI 我添加了通过 class 使用查询检索到的数据,如下所示:

private void cmbxAuth1MouseClicked(java.awt.event.MouseEvent evt) {                                       
    // TODO add your handling code here:

    au.getAuth();
    cmbxAuth.addItem(au.getAuthId()+" | "+au.getAuthName());
}     

我将输出与作为 Int 的 Id 和作为字符串的 Name 连接起来。现在这不会将从数据库查询的所有数据加载到组合框,我做错了什么?解决办法是什么 ?

if(rs.next()) {
    this.setAuthId(rs.getInt(1));
    this.setAuthName(rs.getString(2));
}

您只有一个 Author 对象实例。每次从 ResultSet 中读取一行时,都会重置作者的 id/name。您需要:

  1. 创建一个新的作者对象并将该对象添加到作者列表中。然后您需要遍历此列表并将每个作者添加到组合框中。基本上,数据库代码不属于 Author 对象。

  2. 每次从 ResultSet 中读取一行时,都会将 id/name 添加到组合框中。这是数据库逻辑不属于作者 class.

  3. 的另一个原因