[英]Populate JCombobox With Arraylist
我似乎无法让ArrayList进入组合框。 该组合框应该显示可用的房间号。
目前,在编译时,组合框显示了我认为是某种异常的东西。 组合框显示带有“ 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;
}
控制器类-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;
}
用户界面-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()
并返回您希望它如何以String表示(即仅房间号)。
您可能要考虑的另一件事是,如果您只想要roomNo
的列表,您可以只使用组合框的房间号吗? 即comboBox1.addItem(rNumList.get(i).getRoomNo());
而不是comboBox1.addItem(rNumList.get(i));
这样,您就不必重写Rooms
类的toString()
了,以防您希望String表示的内容不仅仅是房间号(也许还有其他内容)。 但是,这样做的问题是,当您选择房间号时,您将不会选择“ Rooms
对象,而只会选择房间号。 您必须做一些额外的查询(使用房间号)才能使用该房间数据库域对象。 因此,这实际上取决于您应该选择哪种方式的完整要求。
组合框显示带有...的行
您的查询仅返回房间号列表,而不返回整个行。 我还注意到您没有使用ORM实体,只是为从qeusry获得的每个房间号创建一个默认Rooms
,因此Rooms对象没有每个房间的特定db数据。 因此,您可能只想使用第二种方法。 但是话又说回来,如果您这样做,创建房间列表将毫无意义。 而是只从结果集中创建一个列表或房间号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.