Слушатель Java, чтобы Проверить, истинно ли логическое значение Объекта - PullRequest
0 голосов
/ 25 января 2019

У меня есть объект с именем menuBarObject.Его класс скрывает логическое значение, называемое «изменено».Возвращает true, если щелкнуть подменю.В моем Mainclass я построил меню BarObject.Я могу получить значение изменено с помощью метода "hasChanged".Если основной метод выполнил свою работу, он будет все метод с именем "contentIsBuild", который снова устанавливает значение false.Могу ли я написать прослушиватель, который становится активным, если изменение возвращает true?Я мог бы сделать это в MenuBar Class.Но мне не нравится это решение.

Мой код для вставки в этот слушатель:

if (newCustomerIsSelected) {
    //Content Area   
    JPanel contentArea = new JPanel();
    //Selection from Sub Menu
    String selectedName = menuBarObject.getSelectedCustomer();
    //Selected Customer Object / Instanze of selectecCustomer Class!
    SelectedCustomer selectedCustomerObject = new SelectedCustomer(selectedName);
    //The seleted Customer
    Customer selectedCustomer = selectedCustomerObject.getSelectedCustomer();
    //Name of selected Customer
    String dataOfSelectedCustomer = selectedCustomer.toString();
    //Creating the content Area
    setCustomerContentArea(dataOfSelectedCustomer, contentArea);
    //Call Menu Bar that content is build
    menuBarObject.contentIsBuild(true);
}

1 Ответ

0 голосов
/ 25 января 2019

Вместо использования changed для записи при щелчке по подменю вы можете использовать MouseListener (https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html) для прослушивания щелчков (при условии, что ваше подменю расширяет класс Component, например, является JPanel или чем-то подобным).

В классе, в котором вы создаете экземпляр своего подменю, вы должны сделать:

submenu.addMouseListener(new MouseListener()
        {

            @Override
            public void mouseReleased(MouseEvent e)
            {
                // Do nothing
            }

            @Override
            public void mousePressed(MouseEvent e)
            {
                // Do nothing
            }

            @Override
            public void mouseExited(MouseEvent e)
            {
                // Do nothing
            }

            @Override
            public void mouseEntered(MouseEvent e)
            {
                // Do nothing
            }

            @Override
            public void mouseClicked(MouseEvent e)
            {
                if (newCustomerIsSelected) {
                    //Content Area   
                    JPanel contentArea = new JPanel();
                    //Selection from Sub Menu
                    String selectedName = menuBarObject.getSelectedCustomer();
                    //Selected Customer Object / Instanze of selectecCustomer Class!
                    SelectedCustomer selectedCustomerObject = new SelectedCustomer(selectedName);
                    //The seleted Customer
                    Customer selectedCustomer = selectedCustomerObject.getSelectedCustomer();
                    //Name of selected Customer
                    String dataOfSelectedCustomer = selectedCustomer.toString();
                    //Creating the content Area
                    setCustomerContentArea(dataOfSelectedCustomer, contentArea);
                    //Call Menu Bar that content is build
                    menuBarObject.contentIsBuild(true); // N.B. This would no longer need to set the changed variable to false.
                }
            }
        });

Если changed важен для вашего приложения, вы можете посмотреть с помощью PropertyChangeSupport (https://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html) для запуска ваших собственных событий. Вероятно, это лучше всего поместить в тот же класс, который устанавливает changed = true.

Это будет выглядеть следующим образом:

private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);

... // Other code in class

public void addChangeListener(PropertyChangeListener listener) {
    this.pcs.addPropertyChangeListener(listener);
}

...

// In the method which sets changed = true
this.pcs.firePropertyChange(null, null, null) // Args are: Property name, old value and new value - set as necessary

Затем в методе, где вычтобы ваш код слушателя работал, вы должны добавить:

// object is the name of the instantiation of the class which sets changed = true
object.addChangeListener(new PropertyChangeListener()
        {

            @Override
            public void propertyChange(PropertyChangeEvent evt)
            {
                if (newCustomerIsSelected) {
                    //Content Area   
                    JPanel contentArea = new JPanel();
                    //Selection from Sub Menu
                    String selectedName = menuBarObject.getSelectedCustomer();
                    //Selected Customer Object / Instanze of selectecCustomer Class!
                    SelectedCustomer selectedCustomerObject = new SelectedCustomer(selectedName);
                    //The seleted Customer
                    Customer selectedCustomer = selectedCustomerObject.getSelectedCustomer();
                    //Name of selected Customer
                    String dataOfSelectedCustomer = selectedCustomer.toString();
                    //Creating the content Area
                    setCustomerContentArea(dataOfSelectedCustomer, contentArea);
                    //Call Menu Bar that content is build
                    menuBarObject.contentIsBuild(true);
                }
            }
        });

Редактировать: Исправлено неверное имя метода.

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