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

时间:2011-11-24 19:13:25

标签: java

我正在构建一个应用程序,其中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();
    }
});

任何帮助将不胜感激

6 个答案:

答案 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;

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