关于多个Tab-Class

时间:2010-05-11 02:51:29

标签: java

我有一个菜单和一个订单类的GUI问题。

我创建了一个变量来存储在菜单类中选择了多少项。

private int totalSelected;

var totalSelected是实时更新的。它可以随时更改,具体取决于actionPerformed()功能。(Exp:totalSelected将添加所有选定的项目)

在订单类中,如何访问实时更新变量totalSelected以检索实时更新值?当我在Menu Class中调用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!
}

}

4 个答案:

答案 0 :(得分:0)

如果我正确阅读你的代码,你需要让你的变量为private static int totalSelected;你需要使它变为静态,以便它对于所有类的实例保持不变。

答案 1 :(得分:0)

您可以使用PropertyChangeListenerPropertyChangeSupport机制在更新值时调度事件,并在变量更改时通知。您的JLabel不会自行更新;即使您要使用除基元之外的对象(请注意,基元只是值,而对象实际上是隐式指针);当变量发生变化时,你需要更新你的JLabel,因为JLabel只是存储一个字符串,而不是对构造字符串的变量的引用。

这是模型 - 视图 - 控制器的概念;您的变量应该在某种类或类中,表示模型(信息),并允许通过属性更改事件观察更改。您的视图类应该只提供显​​示逻辑,而不是业务或特定于应用程序的逻辑。它是应用程序逻辑应驻留在的控制器;您的控制器应该注册模型上的事件,并且应该在模型发生更改时更新视图,并且当视图调度应该导致模型更改的事件时,它应该同样更新模型。

答案 2 :(得分:0)

我看起来你没有在用户做出选择时更新private int totalSelected;变量,所以它总是为0。

答案 3 :(得分:0)

  

雅!我刚刚意识到我的JLabel   不会更新该值   自动。那么我该如何解决呢?   谢谢! - 克里斯汀

如果我理解正确,你有两个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

我希望这有点帮助