添加到JMenuBar并设置JMenuBar后,Eclipse不显示JMenu项目?

时间:2014-06-22 03:27:28

标签: java swing jmenu jmenuitem jmenubar

没有任何错误,但程序只显示单词" menu"在程序的顶部。它不会显示3 JMenu个项目:" home"," about"和"探索"。

JPanel p5 = new JPanel(new GridBagLayout());
                p5.setVisible(true);
                fw.add(p5, BorderLayout.PAGE_START);

                JMenu menu = new JMenu("Menu");
                menu.setVisible(true);
                menu.add("home");
                menu.add("about");
                menu.add("explore");

                JMenuBar menubar = new JMenuBar();
                fw.setJMenuBar(menubar); //ADDED THIS LINE. STILL DOESN'T WORK. 

                menubar.setVisible(true);
                menubar.add(menu);
                p5.add(menu);

我已将JMenu添加到JMenuBar(所有JMenuJMenubarJPanel设置为可见)。我还将JPanel(p5)添加到"第一个窗口(fw)并将菜单添加到p5。我不确定为什么我的菜单项没有显示。

更新:根据要求提供MCVE(最小完整和可验证示例)。

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;  
public class TestingClass  extends JFrame {

    public static void main(String[] args) {

        FirstWindow fw = new FirstWindow();
        fw.setSize(400, 600);
        fw.setDefaultCloseOperation(EXIT_ON_CLOSE);         
        fw.setVisible(true);

        JPanel p5 = new JPanel(new GridBagLayout());
        p5.setVisible(true);

        fw.add(p5);

        JMenu menu = new JMenu("Menu");
        menu.setVisible(true);
        menu.add("home");
        menu.add("about");
        menu.add("explore");

        JMenuBar menubar = new JMenuBar();
        fw.setJMenuBar(menubar);    // THE UPDATED LINE OF CODE.
        menubar.setVisible(true);
        menubar.add(menu);
        p5.add(menu);
      } 
    }

当你运行程序时,你会看到单词" menu"显示。项目:"家庭,关于和探索"来自JMenu的信息不会显示。有人知道我做错了什么吗?

3 个答案:

答案 0 :(得分:3)

您需要将menuBar添加到框架中:

frame.setJMenuBar( menuBar );

此外,您不需要让Swing组件可见,因为默认情况下它们是可见的(顶级包含,例如您需要设置可见的JFrame)。

答案 1 :(得分:3)

运行时问题的MCVE应该干净地编译。这显示了3个编译错误。一个是缺少导入(容易修复),但另外两个与缺少的FirstWindow相关。

然而,一旦做了一些调整,问题就变得清晰了。组件只能出现在一个地方。通过将其添加到面板(下面已注释),它也不会出现在菜单中。

enter image description here

import java.awt.*;
import javax.swing.*;

public class TestingClass  extends JFrame {

    public static void main(String[] args) {

        JFrame fw = new JFrame();
        fw.setSize(400, 200); // for screenshot
        fw.setDefaultCloseOperation(EXIT_ON_CLOSE);

        JPanel p5 = new JPanel(new GridBagLayout());
        p5.setVisible(true);

        fw.add(p5);

        JMenu menu = new JMenu("Menu");
        //menu.setVisible(true);
        menu.add("home");
        menu.add("about");
        menu.add("explore");

        JMenuBar menubar = new JMenuBar();
        fw.setJMenuBar(menubar);    // THE UPDATED LINE OF CODE.
        //menubar.setVisible(true);
        menubar.add(menu);
        //p5.add(menu); // WTF?

        fw.setVisible(true); //should be done after all components are added
    }
}

答案 2 :(得分:-2)

添加组件后需要调用setVisible()!首先添加所有组件。将最高级别的组件添加到JFrame(您的情况为JPanel)和setVisible()的唯一电话JFrame。无需调用每个组件。

JMenu menu = new JMenu("Menu");
menu.add("home");
menu.add("about");
menu.add("explore");
//rest of the components
//add panelto the frame
frame.getContentPane.add(p5);
//set menubar for the frame
frame.setJMenuBar( menuBar );
//set visibility for frame to true
frame.setVisible(true);