Java 如何创建显示在程序顶部的Swing菜单栏?

Java 如何创建显示在程序顶部的Swing菜单栏?,java,swing,user-interface,kotlin,menubar,Java,Swing,User Interface,Kotlin,Menubar,编码语言:我正在用Kotlin和Swing进行编码,但如果您提供任何Java代码,我可以将其转码到Kotlin。我知道Kotlin和Java,所以我可以理解其中任何一种。此外,我在Swing中编写应用程序,目前没有库 我想为我的应用程序创建一个菜单栏,在应用程序的最顶端,在顶部栏中。我已经搜索过了,并找到了各种菜单栏教程,但每一个教程都会在应用程序图标和应用程序最小化、最大化和关闭按钮下方显示一个带有选项的栏 即使是官员也只能得到下图。 还有许多其他教程,但它们都只展示了如何在应用程序的实际顶

编码语言:我正在用Kotlin和Swing进行编码,但如果您提供任何Java代码,我可以将其转码到Kotlin。我知道Kotlin和Java,所以我可以理解其中任何一种。此外,我在Swing中编写应用程序,目前没有库

我想为我的应用程序创建一个菜单栏,在应用程序的最顶端,在顶部栏中。我已经搜索过了,并找到了各种菜单栏教程,但每一个教程都会在应用程序图标和应用程序最小化、最大化和关闭按钮下方显示一个带有选项的栏

即使是官员也只能得到下图。

还有许多其他教程,但它们都只展示了如何在应用程序的实际顶部下方创建菜单栏。我以为这只是因为应用程序无法更改顶部栏上的内容,但后来我意识到我现在使用的Chrome应用程序不仅仅显示标题、图标和三个按钮。它有一个完整的标签系统。所有MicrosoftOffice应用程序的顶部栏都有额外的按钮,尽管它们还有一个用于菜单项的额外栏。提供了一个屏幕截图,显示了一个自动保存按钮和一些附加功能。(我删除了我的详细信息)

作为一个完美的例子,我提供了Jetbrains的IntelliJ想法的屏幕截图。据我所知,IntelliJ是在Swing中编码的,没有库,所以它们所做的任何事情都必须在Swing中实现。我希望在最上面的栏上有很多选项,就像下面的截图一样。

为了防止我所说的内容有任何歧义,我希望我的顶部栏(带有关闭按钮的栏)、最大化和最小化按钮、图标和应用程序标题也包括其他选项。在IntelliJ的例子中,包括文件、编辑、查看、导航等。根据我的应用程序的用途,我可能会包括文件、保存、撤消、选项和帮助,并使用下拉列表选择列表中的项目。(例如,将鼠标悬停在文件上方后,文件可能会在下拉菜单中显示“打开”、“打开最近”、“新建”、“设置”等)

如果您有任何关于如何做到这一点的链接,我们将不胜感激。同样,我正在用Kotlin编写我的项目,但我也懂Java,所以我将从这两个方面获取答案。

Swing中的
JFrame
的顶部栏称为标题栏。它是
JFrame
装饰的一部分。
JFrame
的边框也是装饰的一部分

你所能做的就是去掉装饰物。然后,菜单栏将显示为顶部栏。移除装饰是通过调用方法实现的。删除装饰也意味着不能移动或调整JFrame的大小,因为它没有边框或标题栏。由于没有标题栏,因此也没有可以单击的X按钮来关闭
JFrame
。您可以添加允许您移动和调整
JFrame
大小的代码,但我认为这不在您的问题范围之内。在任何情况下,如果与你相关,你会在互联网上找到如何做到这一点的例子。尽管如此,您仍然可以通过键盘按Alt+F4键关闭
JFrame

下面是一个小型Swing应用程序,它显示一个空的、未装饰的、带有菜单的
JFrame

导入java.awt.Color;
导入java.awt.EventQueue;
导入javax.swing.JFrame;
导入javax.swing.JMenu;
导入javax.swing.JMenuBar;
导入javax.swing.JMenuItem;
导入javax.swing.UIManager;
导入javax.swing.WindowConstants;
公共类MenuTest实现可运行{
私有JFrame;
公开募捐{
createAndShowGui();
}
私有void createAndShowGui(){
frame=新的JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setJMenuBar(createMenuBar());
框架。设置尺寸(400350);
框架。设置未装饰(真实);
frame.setLocationByPlatform(真);
frame.setVisible(true);
}
私有JMenu createEditMenu(){
JMenu editMenu=新JMenu(“编辑”);
JMenuItem cutItem=新的JMenuItem(“切割”);
编辑菜单。添加(cutItem);
JMenuItem copyItem=新的JMenuItem(“副本”);
编辑菜单。添加(复制项);
JMenuItem pasteItem=新的JMenuItem(“粘贴”);
编辑菜单。添加(粘贴项);
返回编辑菜单;
}
私有JMenu createFileMenu(){
JMenu fileMenu=新JMenu(“文件”);
JMenuItem newItem=新JMenuItem(“新”);
fileMenu.add(newItem);
JMenuItem openItem=新的JMenuItem(“打开”);
fileMenu.add(openItem);
JMenuItem saveItem=新的JMenuItem(“保存”);
fileMenu.add(保存项);
返回文件菜单;
}
私有JMenuBar createMenuBar(){
JMenuBar menuBar=新的JMenuBar();
添加(createFileMenu());
添加(createEditMenu());
返回菜单栏;
}
公共静态void main(字符串[]args){
UIManager.put(“菜单栏.背景”,颜色.浅灰色);
invokeLater(new MenuTest());
}
}
Swing中
JFrame
的顶部栏称为标题栏。它是
JFrame
装饰的一部分。
JFrame
的边框也是装饰的一部分

你所能做的就是去掉装饰物。然后,菜单栏将显示为顶部栏。移除装饰是通过调用方法实现的。删除装饰也意味着不能移动或调整JFrame的大小,因为它没有边框或标题栏。由于没有标题栏,因此也没有可以单击的X按钮来关闭
JFrame
。您可以添加允许您移动和调整
JFrame
大小的代码,但我认为这并不合适