我似乎无法让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;
}
Controller类 - 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);
答案 0 :(得分:1)
HotelReservation.entity.Rooms@24084dad
您所看到的是Rooms
对象的内存位置。您可以简单地覆盖toString()
类的Rooms
,并将其表示形式(即只是房间号)表示为字符串。
您可能想要考虑的另一件事是,如果您只想要roomNo
的列表,可以使用组合框的房间号。即comboBox1.addItem(rNumList.get(i).getRoomNo());
而不是comboBox1.addItem(rNumList.get(i));
这样您就不必覆盖toString()
类的Rooms
,以防您希望字符串表示超过Rooms
只是房间号码(也许是其他的东西)。但问题是,当您选择房间号时,您不会选择Rooms
对象,而只选择房间号。您将不得不进行一些额外的查询(使用房间号)来使用该房间数据库域对象。所以这真的取决于你应该采用哪种方式的全部要求。
组合框显示行......
您的查询仅返回房间号列表,而不是整行。我还注意到您没有使用ORM实体,您只是为从qeusry获得的每个房间号创建默认{{1}},因此房间对象不具有每个房间的特定数据库数据。所以你可能只想使用第二种方法。但话说回来,如果你这样做,我认为创建一个房间列表毫无意义。而只是从结果集中创建列表或房间号。