首页 > 解决方案 > 显示在另一个类/文件中创建的菜单栏

问题描述

我有两个文件/类,主类和菜单栏类。

这是我的主要课程:

public static void main(String[] args){
    journalFrame = new JFrame("Journal Viewer");
    journalFrame.setJMenuBar(menuBar = new JMenuBar());

    journalFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    journalFrame.setPreferredSize(new Dimension(500, 800));
    journalFrame.pack();
    journalFrame.setLocationRelativeTo(null);
    journalFrame.setVisible(true);
}

这是我的菜单栏类:

MenuBar(){
    mMbar = new JMenuBar();

    fileMenu = new JMenu("File");
    aboutMenu = new JMenu("About");

    openItem = new JMenuItem("Open");
    openItem.addActionListener((ActionListener) this);
    fileMenu.add(openItem);

    exitItem = new JMenuItem("Exit");
    exitItem.addActionListener((ActionListener) this);
    fileMenu.add(exitItem);

    mMbar.add(fileMenu);
}

我的输出只是一个没有菜单栏的普通窗口。我如何让它出现?

标签: javaswing

解决方案


您不是在创建类的对象,而是在JMenuBar调用menuBar = new JMenuBar(). 此外,如果这是您的完整代码,它会有多个问题,老实说,我不会费心去弄清楚为什么我在点和分号上遇到编译器错误。请注意,setJMenuBar(JMenuBar menuBar)只能使用 JMenuBar 对象作为参数调用。因此,要么Override用那种方法让它按照你想要的方式运行,要么尝试其他方法。

我将加入@AndrewThompson 的观点,他认为在 GUI 类中创建菜单栏会更有意义。

这是您的代码可能(或可能应该)的样子:

public class Main
{
    private static JFrame journalFrame;
    private static JMenuBar menuBar;

    public static void main(String[] args)
    {
        journalFrame = new JFrame("Journal Viewer");
        menuBar = new JMenuBar();

        JMenu fileMenu = new JMenu("File");
        JMenu aboutMenu = new JMenu("About");

        JMenuItem openItem = new JMenuItem("Open");
        openItem.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                // TODO: Your open action
            }
        });
        fileMenu.add(openItem);

        JMenuItem exitItem = new JMenuItem("Exit");
        exitItem.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                // TODO: Your exit action
            }
        });
        fileMenu.add(exitItem);

        menuBar.add(fileMenu);
        menuBar.add(aboutMenu);

        journalFrame.setJMenuBar(menuBar);
        journalFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        journalFrame.setPreferredSize(new Dimension(500, 800));
        journalFrame.pack();
        journalFrame.setLocationRelativeTo(null);
        journalFrame.setVisible(true);
    }
}

推荐阅读