无法将 JMenuBar 添加到扩展的 JFrame

Posted

技术标签:

【中文标题】无法将 JMenuBar 添加到扩展的 JFrame【英文标题】:Trouble adding JMenuBar to extended JFrame 【发布时间】:2013-03-04 08:53:50 【问题描述】:

我的 Main 类扩展了 JFrame 并且由于某种原因,我无法正确显示我的 MenuBar 和项目。添加菜单栏有什么特殊的方法吗?

public class Main extends JFrame

// DRIVER
public static void main(String[] args) 

    EventQueue.invokeLater(new Runnable() 
        public void run() 
            try 
                Main window = new Main();
             catch (Exception e) 
                e.printStackTrace();
            
        
    );



private JMenuBar menuBar; 

private JMenu menu,
          menuFile;

private JMenuItem menuItemNew,
              menuItemExit;
...

// CONSTRUCTOR
public Main()


    initializeWindow();
    initializeMenu();


private void initializeWindow()

    setTitle(TITLE + " " + VERSION);
    setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    setBackground(Color.DARK_GRAY);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    backgroundColor = new GradientBackground(WINDOW_WIDTH, WINDOW_HEIGHT);


private void initializeMenu()

    // Menubar
    menuBar = new JMenuBar();
    menuBar.setBounds(0, 0, WINDOW_WIDTH, 72);
    menuBar.setBackground(Color.LIGHT_GRAY);
    menuBar.setVisible(true);
    setJMenuBar(menuBar);

    // Menu title
    menu = new JMenu();
    menu.setForeground(Color.BLACK);
    menuBar.add(menu);



    // File Option
    menuFile = new JMenu("FILE");
    menuFile.setForeground(Color.BLACK);
    menuFile.setBackground(Color.DARK_GRAY);
    menuBar.add(menuFile);

    // New File
    menuItemNew = new JMenuItem("New");
    menuItemNew.setForeground(Color.BLACK);
    menuItemNew.setBackground(Color.DARK_GRAY);
    menuFile.add(menuItemNew);

    // New File
    menuItemExit = new JMenuItem("Exit");
    menuItemExit.setForeground(Color.BLACK);
    menuItemExit.setBackground(Color.DARK_GRAY);
    menuItemExit.setEnabled(true);
    menuFile.add(menuItemExit);

    getContentPane().add(menuBar);
 // END initializeMenu()

【问题讨论】:

setJMenuBar(menuBar); 就够了,不用getContentPane().add(menuBar); 1- 先尝试调用 initializeMenu。 2- 为什么要将 menuBar 添加到 contentPane? 删除该呼叫:getContentPane().add(menuBar); 【参考方案1】:

我认为您在寻找 JFrame.setMenuBar 而不是 add(JMenuBar)

Java 5 和更新版本不需要getContentPane()

不要扩展JFrame,将这个Object创建为local variable

【讨论】:

以上是关于无法将 JMenuBar 添加到扩展的 JFrame的主要内容,如果未能解决你的问题,请参考以下文章

无法将组件添加到扩展 JFrame 的类

如何在已经扩展 Thread 的类中扩展 JFrame

无法将 Kotlin Android 扩展添加到我的项目

Azure 中的扩展事件 - 无法将对象添加到事件会话中

第十三周课程总结

React/Redux - 使用扩展运算符将对象添加到数组的开头