我有一个名为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);
}
答案 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);
}
}
});
编辑:修复了错误的方法名称。