Java JMenuBar不显示

Java JMenuBar不显示,java,swing,jmenu,jmenuitem,jmenubar,Java,Swing,Jmenu,Jmenuitem,Jmenubar,我试图让我的JMenuBar显示在GUI中,但是它只是在顶部显示为1像素线 这是我的密码 public LibraryView() { setBounds(100,100,640,480); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); JMenuBar b1 = new JMenuBar(); JM

我试图让我的JMenuBar显示在GUI中,但是它只是在顶部显示为1像素线

这是我的密码

public LibraryView() {
    setBounds(100,100,640,480);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());

    JMenuBar b1 = new JMenuBar();
    JMenu m1 = new JMenu("Test");
    JMenuItem i1 = new JMenuItem("Item1");

    this.setJMenuBar(b1);
}

有人能帮我弄清楚哪里出了问题。

您需要将
JMenu
JMenuItem
添加到
JMenuBar
中。您还需要
pack()
setVisible(true)在方法的末尾,就在GUI显示之前

public LibraryView() {
    setBounds(100,100,640,480);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());

    JMenuBar b1 = new JMenuBar();
    JMenu m1 = new JMenu("Test");
    JMenuItem i1 = new JMenuItem("Item1");

    m1.add(i1); // ADDED
    b1.add(m1); // ADDED

    this.setJMenuBar(b1);

    pack(); // ADDED
    setVisible(true); // MOVED
}

您需要将
JMenu
JMenuItem
添加到
JMenuBar
中。您还需要
pack()
setVisible(true)在方法的末尾,就在GUI显示之前

public LibraryView() {
    setBounds(100,100,640,480);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());

    JMenuBar b1 = new JMenuBar();
    JMenu m1 = new JMenu("Test");
    JMenuItem i1 = new JMenuItem("Item1");

    m1.add(i1); // ADDED
    b1.add(m1); // ADDED

    this.setJMenuBar(b1);

    pack(); // ADDED
    setVisible(true); // MOVED
}

将所有组件添加到顶层窗口后,应调用
setVisible(true)
only。另外,不要忘记使用布局管理器,让这些管理器和组件的首选大小设置组件的大小,不要忘记调用
pack()

在将所有组件添加到顶层窗口后,应该调用
setVisible(true)
。另外,不要忘记使用布局管理器,让这些管理器和组件的首选大小设置组件的大小,并且不要忘记在调用set visible(true)之前调用
pack()

调用repaint()。这决不会失败

 setJMenuBar(menuBar);
 menuBar.add(jMenuItem);
 repaint(); //then
 setVisible(true); //Assured NEVER FAILS
在调用set visible(true)之前调用repaint(),这永远不会失败

 setJMenuBar(menuBar);
 menuBar.add(jMenuItem);
 repaint(); //then
 setVisible(true); //Assured NEVER FAILS

非常感谢。忘了把物品添加到吧台上了,啊。。你能简要解释一下为什么需要打包吗?没有它,代码似乎可以正常工作。大多数Java GUI都是自动调整大小的,这意味着它们将根据窗口的大小和其中的组件而增长和收缩。调用
pack()
将计算窗口的首选大小,以便所有组件也可以按其按下的大小显示。这对你来说可能不是完全必要的,因为你已经
setBounds()
,但是不管怎样调用
pack()
都是一个好习惯。谢谢!实际上,在调用
pack()
后,框架会忽略
setBounds()
并调整大小,以便所有元素都能放入其中。谢谢!忘了把物品添加到吧台上了,啊。。你能简要解释一下为什么需要打包吗?没有它,代码似乎可以正常工作。大多数Java GUI都是自动调整大小的,这意味着它们将根据窗口的大小和其中的组件而增长和收缩。调用
pack()
将计算窗口的首选大小,以便所有组件也可以按其按下的大小显示。这对你来说可能不是完全必要的,因为你已经
setBounds()
,但是不管怎样调用
pack()
都是一个好习惯。谢谢!实际上,在调用
pack()
后,框架会忽略
setBounds()
并调整大小,以便所有元素都能放入其中。repain()解决了这个问题,但只有在调用setVisible()后才有效。repain()解决了这个问题,但只有在调用setVisible()时才有效在它之后,不是相反的方向。