关于多选项卡类
我有关于一个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!
}
}
如果我看了你的代码的权利,你需要让你的变量是private static int totalSelected;
你需要让静态的,因此它保持在类的所有实例相同。
您可以使用PropertyChangeListener和PropertyChangeSupport机制在值更新时分派事件,并在变量发生变化时通知。你的JLabel不会自行更新;即使你使用的不是基元的对象(注意基元只是值,而对象实际上是隐含的指针);当变量发生变化时,您将需要更新JLabel,因为JLabel只是简单地存储一个字符串,而不是对从中构建字符串的变量的引用。
这是model-view-controller的概念;你的变量应该在某种代表模型(信息)的类或类中,并且允许通过属性变化事件来观察变化。您的视图类应简单地提供显示逻辑,而不提供业务或应用程序特定的逻辑。它是您的应用程序逻辑应该驻留的控制器;你的控制器应该在模型上注册事件,并且它应该在模型发生变化时更新视图,并且当视图调度应该导致模型被改变的事件时它也应该更新模型。
雅!我刚刚意识到我的JLabel不会自动更新这个值。那我该如何解决它?谢谢! – Christine 2010-05-11 04:41:45
@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
我希望这有助于有点
有一个'Order'实例作为'Menu'类的成员?另外,你能展示更多的代码吗? – strager 2010-05-11 02:54:48
Hi strager!感谢您的回复!我编辑了我的帖子,以指明我的问题更清楚!你能否看看能否帮助我?谢谢! – Christine 2010-05-11 03:23:32