У меня есть Menubar, который содержит JMenu
и JMenuItems
class MenuBar implements MenuListener, ActionListener {
private JMenu menuA;
private JMenu menuB;
private JMenuItem subMenuA;
private JMenuItem subMenuB;
public MenuBar() {
menuB.addMenuListener(this);
subMenuA.addActionListener(this);
subMenuB.addActionListener(this);
//add submenus to menuA, etc
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source == subMenuA) {
new MyFrame("One")
}
if(source == subMenuB) {
new MyFrame("Two")
}
}
@Override
public void menuSelected(MenuEvent e) {
Object source = e.getSource();
if(source == replaceMenu) {
new MyFrame("Three")
}
}
}
Теперь, когда я нажимаю subMenuA
или subMenuB
- он правильно открывает новый кадр.Нажатие на menuB
должно иметь такую же функциональность.Я понял, что не могу просто от addActionListener(this)
до JMenu
, поэтому вместо этого я добавляю addMenuListener(this)
.Дело в том, что он работает немного иначе, чем ActionListener
.Оба кадра, которые я открываю, имеют одинаковую реализацию.Но если я использую ActionListener
- рамка открывается и остается открытой, с другой стороны, если я использую MenuListener
- она открывается и затем скрывается под основной рамкой.
Вот код этих фреймов
MyFrame(String title) {
frame = new JFrame(title);
initComponents(frame);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setSize(new Dimension(WIDTH, HEIGHT));
frame.setLocation(((Toolkit.getDefaultToolkit().getScreenSize().width - frame.getSize().width) / 2),
((Toolkit.getDefaultToolkit().getScreenSize().height - frame.getSize().height) / 2));
frame.setResizable(false);
frame.setVisible(true);
}
Как избежать Frame
, созданных через MenuListener::menuSelected
, от скрытия под основным фреймом?