Java 从与Arraylist相关的另一个类调用方法

Java 从与Arraylist相关的另一个类调用方法,java,Java,我正在用一个抽象的Room类和一个继承自Room的标准类构建一个应用程序。然后,我创建了一个旅舍类。在Hostel类中是ArrayList rooms,可以添加房间。我在Hostel类中创建了一个方法,该方法显示了所有可用的房间,但当我尝试在另一个类(MainGUI)中实例化该方法时,没有显示任何内容。据我所知,这是因为我每次点击按钮都会创建一个新的招待所,但我想知道如何传递数据,而不是每次创建一个新的招待所。下面是相关的代码片段 旅馆类 public Hostel() { rooms

我正在用一个抽象的
Room
类和一个继承自
Room
标准
类构建一个应用程序。然后,我创建了一个
旅舍
类。在
Hostel
类中是
ArrayList rooms
,可以添加房间。我在
Hostel
类中创建了一个方法,该方法显示了所有可用的房间,但当我尝试在另一个类(
MainGUI
)中实例化该方法时,没有显示任何内容。据我所知,这是因为我每次点击按钮都会创建一个新的招待所,但我想知道如何传递数据,而不是每次创建一个新的招待所。下面是相关的代码片段

旅馆类

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);
}
roomsFreeB.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        Hostel host = new Hostel();
        host.showAvail();
    }
});

任何帮助都将不胜感激

很高兴看到您如何初始化旅馆内的房间。如果您只想初始化Hostel一次,请在侦听器之外进行初始化。在这种情况下,它不能是MainGUI中的字段

 public void actionPerformed(ActionEvent e)
{
    Hostel host = new Hostel();
    host.showAvail();
}
在前面的代码中,创建对象,然后在方法完成后销毁。变量host是一个局部变量,因此仅在方法执行期间有效


根据需要执行的操作,您应该在main方法中声明host变量,或者在main方法中再次声明hostel数组

因为您每次都在创建新的招待所。我想在ArrayList中将有to
Room
s

您需要在actionPerformed外部创建Hostel对象。在您的情况下,它应该只创建一次。在这个创建的Hostel对象上,您将添加
房间
对象

如果问题是在哪里做。。这就留给你了。这取决于你的设计

因为它可能是


您可以创建一个名为
ABC
的类,在该类中可以创建hostel对象。编写一个名为getHostel()的静态方法。然后调用ABC.gethotel()

,除非您省略了hotel host=new hotel()之间的代码
host.showAvail(),您从未向宿舍添加任何房间,因此没有可用房间(或任何房间)可显示。您需要在创建
host
之后和
showAvail
之前将房间添加到
host
,或者创建一个
Hostel
实例变量,将其填充到某个地方,然后打电话给showAvail

是的,您是对的,每次执行操作时,都会创建一个新的招待所,与招待所关联的房间列表也是如此

点击按钮,您将知道要显示的旅馆(可能正在阅读您的应用程序数据库或其他内容),如果这是您的旅馆第一次有空房间,否则一旦您阅读了旅馆信息,您也将了解属于该旅馆的房间,然后可以通过构造函数或setter方法将其传递给hostel对象

代码段:

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
}

希望这能给您一些启示。

您的问题正是您所想的,您每次单击按钮都会创建一个新的ArrayList,因此您将永远看不到数据。您应该首先在
MainGUI
类中创建
hostel
对象

私人旅馆


这将允许引用以前输入的信息

我编辑了代码,显示了阵列列表在hostel Classis中的初始化位置。我只是想知道您是否确定,房间已创建并添加到该阵列列表中?在我的hostel class中,我可以调用showAvail()方法并显示可用房间,当我尝试在MainGUI类中执行此操作时,我的问题是你在哪里填充
房间
?@Kevin我在标准类中有一个标准房间的构造函数,然后将它们添加到hotel类中的数组列表中它们是否添加到其构造函数中的
hotel
?如果是这样的话,也发布代码。如果没有,那就是你的问题,添加
房间
s的代码永远不会被调用。我已经添加了添加房间构造函数。
addRoom()
是一个方法,而不是构造函数。它不会自动调用,您也不会在发布的代码中调用它,因此,
旅舍及其
房间
永远不会添加
房间
。在执行的操作中,我只希望该方法起作用,从而通过JOptionPane显示我的可用房间,如showAvail中所示method@John能源部:通过工作,你是说JOptionPane没有显示吗?我从hotel类创建了一个hotel,然后这个hotel添加了房间,“工作”意味着单击按钮即可显示已添加的房间roomsFreeB@JohnDoe:构造函数初始化房间的arraylist,但不创建任何房间,因此程序不会显示任何内容,因为没有可显示的房间,因为您不调用
host.addRoom()
方法在创建
旅舍
和显示其房间之间,从未添加任何房间。