Java 使用Arraylist填充JCombobox

Java 使用Arraylist填充JCombobox,java,eclipse,swing,arraylist,jcombobox,Java,Eclipse,Swing,Arraylist,Jcombobox,我似乎无法让ArrayList进入组合框。组合框应该显示可用的房间号 目前,当它编译时,combobox显示了我认为是某种异常的东西。组合框显示带有HotelReservation.entity的行。Rooms@24084dad,HotelReservation.entity。Rooms@716ab511..etc 我正在为我的应用程序实现三层体系结构。我做错了什么 实体-Rooms.java public ArrayList<Rooms> getRoomNums() { /

我似乎无法让ArrayList进入组合框。组合框应该显示可用的房间号

目前,当它编译时,combobox显示了我认为是某种异常的东西。组合框显示带有HotelReservation.entity的行。Rooms@24084dad,HotelReservation.entity。Rooms@716ab511..etc

我正在为我的应用程序实现三层体系结构。我做错了什么

实体-Rooms.java

public ArrayList<Rooms> getRoomNums() {
    // TODO Auto-generated method stub
    ArrayList<Rooms> rNumList = new ArrayList<Rooms>();
    DBController db = new DBController();
    String dbQuery="SELECT DISTINCT roomNo FROM Rooms "
            + "WHERE hotelNo='" + CheckAvailability.hotNo + "' AND type='" + AgentDetails.typeDin + "' AND roomNo NOT IN (SELECT roomNo FROM booking WHERE departureDate >= '" 
            + CheckAvailability.depDate + "' AND arrivalDate <= '" + CheckAvailability.arrDate + "');";
    try{
        db.getConnection();
        ResultSet rs = db.readRequest(dbQuery);
        while(rs.next())
        {
            Rooms r = new Rooms(rs.getString("roomNo"));
            rNumList.add(r);
        }
     }

    catch(Exception e){
        e.printStackTrace();
    }
    db.terminate();
    return rNumList;
}
控制器类-AdministrateController.java

public ArrayList processGetRoomNum() {
    // TODO Auto-generated method stub
    Rooms s = new Rooms();
    ArrayList<Rooms> rNumList = new ArrayList<Rooms>();
    rNumList = s.getRoomNums();
    return rNumList;

}
UI-GuestDetails.java

comboBox1 = new JComboBox();
comboBox1.setFont(new Font("Tahoma", Font.PLAIN, 15));
comboBox1.setBounds(61, 9, 411, 25);
ucc = new AdministrateController();
ArrayList<Rooms>rNumList = new ArrayList<Rooms>();
rNumList = ucc.processGetRoomNum();
displayRoomNo(rNumList);


private void displayRoomNo(ArrayList<Rooms> rNumList) {
    // TODO Auto-generated method stub

    //I have tried two different ways but still didn't work
    //#1 For loop
    for (int i = 0; i < rNumList.size(); i++){

            comboBox1.addItem(rNumList.get(i));
     }

    //#2Convert to array & set model
    DefaultComboBoxModel model = new DefaultComboBoxModel(rNumList.toArray(new 
    Rooms[rNumList.size()]));
    comboBox1.setModel(model);
HotelReservation.entity。Rooms@24084dad

您看到的是Rooms对象的内存位置。您可以简单地重写Rooms类的toString,并返回希望它的表示方式,即仅将房间号作为字符串

你可能想考虑的另一件事是,如果你只想要一个ROOMNO的列表,你可以只使用组合框的房间号。i、 e.comboBox1.addItemrNumList.geti.getRoomNo;而不是comboBox1.addItemrNumList.geti;这样,您就不必重写Rooms类的toString,以防您希望字符串表示形式不仅仅是roomnumber,也可能是其他内容。但问题是,当您选择房间号时,您不会选择房间对象,而是选择房间号。您必须对房间号执行一些额外的查询,才能使用该房间db域对象。因此,这实际上取决于你应该走哪条路的全部要求

组合框显示带有


您的查询只返回房间号列表,而不返回整行。我还注意到您没有使用ORM实体,您只是为从qeusry获得的每个房间号创建了一个默认房间,因此房间对象没有每个房间的特定db数据。因此,您可能只想使用第二种方法。但是,如果你这样做的话,我认为没有必要创建一个房间列表。相反,只需根据结果集创建一个列表或房间号。

它可以工作。我现在可以找回房间号了。谢谢你的解释。