我有一个菜单和一个订单类的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!
}
}
答案 0 :(得分:0)
如果我正确阅读你的代码,你需要让你的变量为private static int totalSelected;
你需要使它变为静态,以便它对于所有类的实例保持不变。
答案 1 :(得分:0)
您可以使用PropertyChangeListener和PropertyChangeSupport机制在更新值时调度事件,并在变量更改时通知。您的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
我希望这有点帮助