Относительно нескольких Tab-Class - PullRequest
0 голосов
/ 11 мая 2010

У меня проблема с графическим интерфейсом с одним меню и одним классом заказа.

Я создал переменную для хранения количества элементов, выбранных в классе меню.

private int totalSelected;

var totalSelected обновляется в реальном времени. Его можно изменить в любое время в зависимости от функции actionPerformed(). (Exp: totalSelected добавит все выбранные элементы)

В классе заказа, как я могу получить доступ к переменной живого обновления totalSelected для получения значения живого обновления? Когда я вызываю функцию 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 голосов
/ 11 мая 2010

Ya! Я только что понял, что мой JLabel не будет обновлять значение автоматически. Так как я могу это исправить? Спасибо! - Кристина

Если я правильно вас понимаю, у вас есть два графических интерфейса, в которых изменения одного (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

Надеюсь, это немного поможет

0 голосов
/ 11 мая 2010

Вы можете использовать механизмы PropertyChangeListener и PropertyChangeSupport для отправки события при обновлении значения и для уведомления об изменении переменной. Ваш JLabel не будет обновляться самостоятельно; даже если вы должны использовать объект, отличный от примитива (обратите внимание, что примитивы являются просто значениями, в то время как объекты на самом деле являются неявными указателями); вам нужно будет обновить JLabel при изменении переменной, поскольку JLabel просто хранит строку, а не ссылку на переменные, из которых была построена строка.

Это концепция модель-представление-контроллер; ваша переменная должна принадлежать к какому-то классу или классам, которые представляют модель (информацию) и позволяют наблюдать изменения через события изменения свойств. Ваши классы представлений должны просто обеспечивать логику отображения, а не логику для бизнеса или приложения. Это контроллер, в котором должна находиться логика вашего приложения; ваш контроллер должен регистрироваться на события в модели и обновлять представление при каждом изменении модели, а также обновлять модель, когда представление отправляет события, которые должны привести к изменению модели.

0 голосов
/ 11 мая 2010

Похоже, что вы не обновляете переменную private int totalSelected;, когда пользователь делает выбор, поэтому она всегда равна 0.

0 голосов
/ 11 мая 2010

Если я правильно прочитал ваш код, вам нужно сделать вашу переменную private static int totalSelected; Вам нужно сделать ее статической, чтобы она оставалась одинаковой для всех экземпляров класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...