2010-05-11 54 views
0

我有關於一個Menu和一個Order類的GUI的問題。關於多選項卡類

我已經創建了一個變量來存儲菜單類中已經選擇了多少項。

private int totalSelected; 

var totalSelected已實時更新。它可以在任何時候根據actionPerformed()函數改變(EXP:totalSelected將加起來所有選定的項目)

在訂單類中,如何訪問實時更新變量totalSelected以檢索實時更新值?當我調用Menu類中的getTotalSelected()函數時,我只會獲得一個0值。

感謝您的幫助^^!


請允許我指定我的問題更清楚。

public class MenuTab extends JPanel 
{ 
    private JLabel display; 
    private int totalSelected; 
    public MenuTab() 
    { 
    .... 
    } 
} 

public getTotalSelected(){ 
    return totalSelected; 
} 

private class SelectedListener implements ActionListener 
{ 
    public void actionPerformed() 
    { 
     ....... 
     //Assume that totalSelected has been updated! 
     display = new JLabel("Total: " + totalSelected); 
     // OK to display totalSelected live value here. 
    } 

} 

// A new class is the confirmation of order 
public class OrderConfirmedTab extends JPanel{ 

private JLabel displayTotal; 
private MenuTab order = new MenuTab(); 

public OrderConfirmedTab() 
{ 
...... 
    int totalSelected = order.getTotalSelected(); 
    displayTotal = new JLabel("Total: " + totalSelected); 
    // Problem to display totalSelected live value here. 
    // Will obtain 0; 
    // How can I obtain the live updated value from class MenuTab? Thanks! 
} 

} 
+1

有一個'Order'實例作爲'Menu'類的成員?另外,你能展示更多的代碼嗎? – strager 2010-05-11 02:54:48

+0

Hi strager!感謝您的回覆!我編輯了我的帖子,以指明我的問題更清楚!你能否看看能否幫助我?謝謝! – Christine 2010-05-11 03:23:32

回答

0

如果我看了你的代碼的權利,你需要讓你的變量是private static int totalSelected;你需要讓靜態的,因此它保持在類的所有實例相同。

0

您可以使用PropertyChangeListenerPropertyChangeSupport機制在值更新時分派事件,並在變量發生變化時通知。你的JLabel不會自行更新;即使你使用的不是基元的對象(注意基元只是值,而對象實際上是隱含的指針);當變量發生變化時,您將需要更新JLabel,因爲JLabel只是簡單地存儲一個字符串,而不是對從中構建字符串的變量的引用。

這是model-view-controller的概念;你的變量應該在某種代表模型(信息)的類或類中,並且允許通過屬性變化事件來觀察變化。您的視圖類應簡單地提供顯示邏輯,而不提供業務或應用程序特定的邏輯。它是您的應用程序邏輯應該駐留的控制器;你的控制器應該在模型上註冊事件,並且它應該在模型發生變化時更新視圖,並且當視圖調度應該導致模型被改變的事件時它也應該更新模型。

+0

雅!我剛剛意識到我的JLabel不會自動更新這個值。那我該如何解決它?謝謝! – Christine 2010-05-11 04:41:45

+0

@Christine,無論何時更新值,您都需要觸發屬性更改事件。具有JLabel的類需要向變量所在的類註冊自己,並且當它接收到屬性更改事件時,它需要相應地更新JLabel。 – 2010-05-11 05:15:11

0

我看起來像當用戶選擇你的更新不及時的private int totalSelected;變量,所以它始終爲0

0

雅!我剛剛意識到我的JLabel 將不會自動更新值 。那我該如何解決它? 謝謝! - Christine

如果我正確理解你,你有兩個GUI,其中一個(MenuTab)的更改會實時更新另一個(OrderConfirmedTab)?

如果是這樣,您將需要增加兩個對象之間的耦合。如果MenuTab具有返回給OrderConfirmedTab的引用,那麼它可以調用方法在值更改時更新值。

例如,通過OrderConfirmedTab到MenuTabs構造

MenuTab mt = new MenuTab(this); // from within OrderConfirmTabs costructor 

然後當MenuTab擁有的actionPerformed事件可以回調OrderConfirmTab

orderConfirmTab.setTotalSelected(totalSelected); // you have to create this method in OrderConfirmTab 

我希望這有助於有點