Java 使用Arraylist填充JCombobox
我似乎无法让ArrayList进入组合框。组合框应该显示可用的房间号 目前,当它编译时,combobox显示了我认为是某种异常的东西。组合框显示带有HotelReservation.entity的行。Rooms@24084dad,HotelReservation.entity。Rooms@716ab511..etc 我正在为我的应用程序实现三层体系结构。我做错了什么 实体-Rooms.javaJava 使用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() { /
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数据。因此,您可能只想使用第二种方法。但是,如果你这样做的话,我认为没有必要创建一个房间列表。相反,只需根据结果集创建一个列表或房间号。它可以工作。我现在可以找回房间号了。谢谢你的解释。