【问题标题】:Populate JCombobox With Arraylist使用 Arraylist 填充 JCombobox
【发布时间】:2014-10-03 05:00:54
【问题描述】:

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

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

我正在为我的应用程序实现 3 层架构。我在这里做错了什么?

实体 - 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;
}

控制器类 - AdmininistrateController.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);

【问题讨论】:

    标签: java eclipse swing arraylist jcombobox


    【解决方案1】:

    HotelReservation.entity.Rooms@24084dad

    您看到的是Rooms 对象的内存位置。您可以简单地覆盖 Rooms 类的 toString() 并将您希望它如何表示(即房间号)作为字符串返回。

    您可能要考虑的另一件事是,如果您只想要roomNo 的列表,您可以只使用组合框的房间号吗?即comboBox1.addItem(rNumList.get(i).getRoomNo()); 而不是comboBox1.addItem(rNumList.get(i)); 这样您就不必覆盖Rooms 类的toString(),以防您希望String 表示不仅仅是房间号(也许是别的东西) .这样做的问题是,当您选择房间号时,您不会选择Rooms 对象,而只是选择房间号。您必须执行一些额外的查询(使用房间号)才能使用该房间数据库域对象。所以这真的取决于你应该走哪条路的全部要求。

    组合框显示带有...的行

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

    【讨论】:

    • 它有效。我现在可以检索房间号。谢谢你的解释。
    猜你喜欢
    • 2010-11-20
    • 2019-08-14
    • 2014-10-02
    • 2013-03-31
    • 2014-08-05
    • 2014-01-24
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多