我正在构建一个应用程序,其中Room
类是抽象的,而Standard
类继承自Room
。然后我创建了一个Hostel
类。在Hostel
类中ArrayList<Room> rooms
可以添加房间。我在Hostel
类中创建了一个显示所有可用空间的方法,但是当我尝试在另一个类(MainGUI
中实例化它时)没有显示任何内容。据我所知,这是因为每次点击按钮我都会创建一个新宿舍,但想知道如何传递数据而不是每次都创建一个新的宿舍。以下是相关的代码片段。
Hostel Class
public Hostel()
{
rooms = new ArrayList<Room>();
}
public void showAvail()
{
for (Room room : rooms)
{
if (room.available == true)
{
theString = room.getRoomData() + "\n";
//System.out.println("Available Rooms" + "\n" + theString);
JOptionPane.showMessageDialog(null,theString);
}
}
}
public void addRoom(Room theRoom)
{
rooms.add(theRoom);
}
MainGUI Class
roomsFreeB.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Hostel host = new Hostel();
host.showAvail();
}
});
任何帮助将不胜感激
答案 0 :(得分:1)
除非您省略了Hostel host = new Hostel();
和host.showAvail();
之间的代码,否则您永远不会向宿舍添加任何房间,因此没有可用的房间(或任何房间)。您需要在创建host
之后和showAvail
之前添加房间,或创建Hostel
实例变量,将其填入某处,然后在其上调用showAvail
答案 1 :(得分:0)
很高兴看到你如何在宿舍中初始化房间。如果您只想初始化Hostel一次,请在Listener之外进行。在这种情况下,它不能是MainGUI中的字段。
答案 2 :(得分:0)
public void actionPerformed(ActionEvent e)
{
Hostel host = new Hostel();
host.showAvail();
}
在前面的代码中,创建对象,然后在方法完成后销毁。变量 host 是一个局部变量,因此仅在执行方法时才存在。
根据你想要做的事情,你应该在main方法中声明你的宿主变量,或者再次在main方法中声明一个宿舍数组。
答案 3 :(得分:0)
因为您每次都在创建新宿舍。我想ArrayList中会有Room
个。
您需要在actionPerformed之外创建Hostel对象。在你的情况下,它应该只创建一次。在这个创建的Hostel对象上,您将添加Room
对象。
如果问题是在哪里做...它留给你。它取决于你的设计。
例如它可以。
您可以创建一个名为ABC
的类,您可以在其中创建宿舍对象。编写一个名为getHostel()的静态方法。然后调用ABC.getHostel()
答案 4 :(得分:0)
是的,你是对的,每次行动都会创建一个新宿舍,所以与宿舍相关的房间列表也是如此。
点击按钮,你会知道你要显示哪个宿舍(可能正在阅读你的申请数据库或其他东西),如果这是你的宿舍第一次有空房间,否则一旦你读了宿舍信息你也会知道属于宿舍的房间,然后可以通过构造函数或setter方法传递给您的宿舍对象。
代码段:
createHostel(String hostelName) {
//read from database
//No hostel with hostelname found create a new hostel else if hostel is found send the same (by this time hostel object would have room information also
}
你的行动
public void actionPerformed(ActionEvent actionEvent) {
//MyFactory.getHostel(String hostelName)
//Once you have hostel object call showAvail on it, if its new you will get nothing else you will get all the rooms available
}
希望这会给你一些见解。
答案 5 :(得分:0)
您的问题正是您的想法,每次单击按钮时都会创建一个新的ArrayList,因此您将永远不会看到数据。您应该首先在hostel
类中创建一个MainGUI
对象,
private Hostel hostel;
这将允许引用先前输入的信息