菜单栏出现在 JFrame 的左侧。如何让它出现在JFrame的顶部?

Posted

技术标签:

【中文标题】菜单栏出现在 JFrame 的左侧。如何让它出现在JFrame的顶部?【英文标题】:MenuBar appears of the left of the JFrame. how to make it appear on the top of JFrame? 【发布时间】:2013-11-06 11:50:36 【问题描述】:
 import javax.swing.*;
import java.awt.event.*;
//import java.awt.event.ActionListener;

 class Test extends JFrame 
 
    JButton qb=new JButton("quit");
    JPanel p1=new JPanel();
    JMenuBar menubar = new JMenuBar();
   JMenu file = new JMenu("File");
   JMenuItem eMenuItem = new JMenuItem("Exit");
    public Test()
   
    //setLayout();
    setTitle("this is a test");
    setSize(300,300);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setAlwaysOnTop(true);
    setResizable(true);
    setExtendedState( this.getExtendedState()|JFrame.MAXIMIZED_BOTH );//to set initial state of frame as minimized
    menubar.add(file);
    add(menubar);
    file.add(eMenuItem);


public static void main (String[] args) 

    new Test();

我已经编写了上面的代码,并试图找出菜单栏出现在框架左侧但失败的原因。 layoutmanager 在测试构造函数中也不起作用。我也尝试在代码中插入一个按钮,但它也没有出现。那么框架出现这种行为的可能原因是什么,解决方法是什么?

【问题讨论】:

【参考方案1】:

你可以尝试调用 setJMenuBar(..)

改变你的代码

    menubar.add(file);
    add(menubar);
    file.add(eMenuItem);

menubar.add(file);
file.add(eMenuItem);
this.setJMenuBar(menubar);

这样就可以正常工作了。

【讨论】:

【参考方案2】:

您使用BorderLayout(默认)将您的菜单添加到容器中,并使用下一个代码:

add(menubar);

但要向JFrame 添加菜单,您可以使用下一行代替您的。

setJMenuBar(menubar);

输出:

【讨论】:

thanx @alex2410 这真的很有帮助,但你能告诉我为什么布局管理器不能在 setLayout() 方法中工作吗?? 在你的代码中你永远不会使用setLayout(),你也必须将LayoutManager传递给那个方法。这里是tutorial。【参考方案3】:

你就这样放

add(menubar,BorderLayout.NORTH);

【讨论】:

【参考方案4】:

这就是你要找的东西

  import javax.swing.*;

import java.awt.GridBagLayout;
import java.awt.event.*;
//import java.awt.event.ActionListener;

 class Test extends JFrame 
 
    JButton qb=new JButton("quit");
    JPanel p1=new JPanel();

JMenuBar menubar = new JMenuBar();
JMenu file = new JMenu("File");
JMenuItem eMenuItem = new JMenuItem("Exit");
public Test()


    setTitle("this is a test");
    setSize(300,300);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setAlwaysOnTop(true);
    setResizable(true);
    setExtendedState( this.getExtendedState()|JFrame.MAXIMIZED_BOTH );//to set initial state of frame as minimized
    menubar.add(file);
    setJMenuBar(menubar);
    file.add(eMenuItem);


public static void main (String[] args) 

    new Test();


【讨论】:

以上是关于菜单栏出现在 JFrame 的左侧。如何让它出现在JFrame的顶部?的主要内容,如果未能解决你的问题,请参考以下文章

div自动适应页面高度,多出部分出现滚动条

使用 TailwindCSS 单击按钮时,使侧边栏从左侧滑入

Java----如何在窗口中创建菜单

iOS 如何在 AppDelegate 中以编程方式设置侧边栏菜单?

滚动时如何使菜单栏固定在顶部

从 iOS 11 上的左侧菜单导航后 Xcode 9 导航栏问题不在 iOS 10.3 及更低版本上