Java侦听器,用于检查对象的布尔值是否为true

时间:2019-01-25 08:27:57

标签: java swing listener

我有一个名为menuBarObject的对象。它的类隐藏了一个名为“ changed”的布尔值。如果单击子菜单,则返回true。 在我的Mainclass中,我构建了menuBarObject。我可以通过一种称为“ hasChanged”的方法来获取更改的值。如果主方法已完成其工作,它将所有称为“ contentIsBuild”的方法重新设置为false。 如果更改返回true,我可以写一个活跃的监听器吗?我可以在menuBar类中做到这一点。但是我不喜欢这种解决方案。

我要放入该侦听器的代码:

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 :(得分:0)

您可以使用MouseListener(https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html)来监听单击,而不必使用changed来记录单击子菜单的时间(假设您的子菜单扩展了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);
                }
            }
        });

编辑:修复了错误的方法名称。