关于多选项卡类

问题描述:

我有关于一个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

如果我看了你的代码的权利,你需要让你的变量是private static int totalSelected;你需要让静态的,因此它保持在类的所有实例相同。

您可以使用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

我看起来像当用户选择你的更新不及时的private int totalSelected;变量,所以它始终为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 

我希望这有助于有点