Вместо использования 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);
}
}
});
Редактировать: Исправлено неверное имя метода.