2011-11-24 44 views
0

我正在用Room類構建一個應用程序,這個類是抽象的,而Standard類繼承自Room。然後我創建了一個Hostel類。在Hostel類中,可以添加房間的是ArrayList<Room> rooms。我在Hostel類中創建了一個顯示所有可用房間的方法,但是當我嘗試在另一個類中實例化此類時(MainGUI),則不顯示任何內容。據我所見,這是因爲我每次點擊按鈕時都會創建一個新的宿舍,但想知道如何傳遞數據而不是每次創建新宿舍。以下是相關的代碼片段。來自另一個類的涉及Arraylist的調用方法

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(); 
    } 
}); 

任何幫助,將不勝感激

+1

你在哪裏灌裝'rooms'? – Kevin

+0

@Kevin我有一個標準類的標準房間的構造函數然後被添加到旅館類中的Array列表 –

+0

他們是否在其構造函數中添加到'Hostel'中?如果是這樣,請發佈該代碼。如果沒有,那是你的問題,添加'房間'的代碼永遠不會被調用。 – Kevin

回答

0

您的問題與您的想法完全相同,您每次單擊按鈕時都會創建一個新的ArrayList,因此您將永遠無法看到數據。你應該在你的MainGUI類創建一個hostel對象開始,

private Hostel hostel;

這將使以前輸入的信息被引用

0

會很好看你如何初始化房間裏面旅館。如果您只想初始化Hostel,請在Listener之外進行。在這種情況下,它不能是MainGUI內的字段。

+0

我已編輯代碼顯示陣列列表在宿舍級別初始化 –

+1

我只是想知道你是否確定,房間是否已創建並添加到該ArrayList? – Romczyk

+0

在我的宿舍班內,我可以調用showAvail方法()和可用房間顯示,這是當我嘗試在MainGUI類中執行此操作時,我的煩惱是 –

0
public void actionPerformed(ActionEvent e) 
{ 
    Hostel host = new Hostel(); 
    host.showAvail(); 
} 

在前面的代碼中,一旦完成該方法,就會創建並銷燬該對象。可變主機是一個局部變量和僅在方法的執行結果住。

根據你想要做什麼,你應該在main方法中聲明你的宿主變量,或者再次在main方法中聲明一個hostel數組。

+0

在執行的操作中,我只是喜歡該方法的工作,通過JOptionPane顯示我的可用房間,如showAvail方法 –

+0

@John Doe:通過工作,你的意思是說JOptionPane沒有顯示? – VirtualTroll

+0

我從旅館班創建了一個旅館,然後這個旅館已經添加了房間,工作將意味着已經添加的房間顯示在點擊按鈕房間FreeB –

0

由於您每次都在創建新的旅館。我想在ArrayList中會有Room

您需要在actionPerformed之外創建Hostel對象。在你的情況下,它應該只創建一次。在這個創建的Hostel對象上,您將添加Room對象。

如果問題是在哪裏做..它的左邊給你。它在你的設計上。

例如它可以。

您可以創建一個名爲ABC的班級,您可以在其中創建宿舍對象。編寫一個名爲getHostel()的靜態方法。然後調用ABC.getHostel()

1

除非你Hostel host = new Hostel();host.showAvail();之間省略的代碼,你永遠不添加任何房間的宿舍,所以沒有可用的房間(或全部)來顯示。您需要在創建後,以添加房間host之前你showAvail,或創建一個Hostel實例變量,地方填寫,然後調用該showAvail

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 
} 

希望這給你一些啓示。