框架隐藏在主框架下

时间:2019-06-09 09:40:22

标签: java swing jframe

我的菜单栏包含JMenuJMenuItems

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")
        }
    }
}  

现在,一旦我单击subMenuAsubMenuB-它会正确打开新框架。单击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隐藏在主框架下?

0 个答案:

没有答案