我的菜单栏包含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
隐藏在主框架下?