如何在 Java 中修改 Mac LAF 的自动生成菜单和“关于”框?

Posted

技术标签:

【中文标题】如何在 Java 中修改 Mac LAF 的自动生成菜单和“关于”框?【英文标题】:How do I modify the auto-generated menu and "About" box of Mac LAF in Java? 【发布时间】:2014-04-26 17:04:03 【问题描述】:

屏幕截图在菜单栏上显示了一个苹果(即系统菜单)应用程序菜单“GSPro”,其中包含关于和退出项目,ss 还显示了内置关于框的外观,可以修改为看起来更专业,有图标/转速/作者等。 这就是我在查找信息和好例子时遇到的麻烦。 文件菜单以后是我的应用程序生成的,在 Windows 中看起来是一样的,所以我知道我必须做的 Windows 菜单与 mac 的东西略有不同。

在 Mac 上,这称为 laf(外观和感觉)。

我的代码片段如下,还没有处理程序,只是测试它的显示方式......

    public class GSPro 

/**
 * @param args
 */
public static void main(String[] args) 

    System.setProperty("apple.laf.useScreenMenuBar", "true");

    JFrame frame = new JFrame();
    frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.setLocationRelativeTo(null);
    frame.setTitle("GSPro");

    JMenuBar menuBar = new JMenuBar();

    JMenu file = new JMenu("File");
    menuBar.add(file);
    JMenu edit = new JMenu("Edit");
    menuBar.add(edit);
    JMenuItem  exit = new JMenuItem("New");
    file.add(exit);
    JMenuItem open = new JMenuItem("Open");
    file.add(open);
    file.addSeparator();
    JMenuItem close = new JMenuItem("Close");
    file.add(close);
    file.addSeparator();
    JMenuItem save = new JMenuItem("Save");
    file.add(save);
    JMenuItem saveas = new JMenuItem("Save As...");
    file.add(saveas);

    frame.setJMenuBar(menuBar);

【问题讨论】:

Java 是跨平台的,您为 Windows 和 Mac 创建的菜单是相同的。如果这就是你的意思。 谢谢,我做了很多 android 开发,所以 java 我可以让事情正常工作,但我正在开始一个项目,我想在 mac 和 windows 上看起来很专业,我只有一个 macbook,我请注意,有一个带有“about”和“quit”的苹果菜单,然后是我的编程菜单,我想修改 about 框以使其看起来更好,但找不到比启用外观或更改标题更多的信息,所以我有点理解一些东西,但其他东西似乎特定于所使用的系统......希望我说得通,我来自低水平的背景,所以没有围绕“主题”的“语言” 除非您发布代码和 \ 或图像,否则没人知道您的 about 框是什么样子或您希望它是什么样子。我无法为您提供关于 to modify the about box to look better 凭空出现的帮助。 我尝试添加一些编辑/图像以尝试显示我的意思,但我没有声誉,我会尝试放在页面上并发布... 您在代码中显示一件事,在屏幕截图中显示另一件事。您仍然没有指定要实现的目标。编辑问题以显示“问题是什么,相关代码是什么?”。 【参考方案1】:

图标和版本信息来自application bundleproperties file(Info.plist)。创建一个包含图标和版本属性的应用程序包,您将看到“关于”对话框显示此信息。

不过,您最好制作自己的自定义“关于”对话框。我从未见过使用上面截屏的默认应用程序。此外,这将允许您跨平台使用相同的 About 对话框。以下是您在 OS X 上的操作方式:

public class Test implements com.apple.eawt.AboutHandler 

    public Test() 
        // comment these two lines to see the default About dialog
        com.apple.eawt.Application app = com.apple.eawt.Application.getApplication();
        app.setAboutHandler(this);

        JFrame myFrame = new JFrame();
        myFrame.setSize(200, 200);
        myFrame.setVisible(true);
    



    @Override
    public void handleAbout(com.apple.eawt.AppEvent.AboutEvent ae) 
        JFrame aboutFrame = new JFrame();
        aboutFrame.setSize(200, 200);
        aboutFrame.add(new JLabel("About"));
        aboutFrame.pack();
        aboutFrame.setVisible(true);
    



    public static void main(String[] args) 
        new Test();
    

【讨论】:

非常感谢你,我让它在 Eclipse 中工作,但不是马上。它给了我对库的访问限制,但我一直在搞砸直到它起作用。 (我真的不记得我做了什么!我随机按下按钮!)这一切似乎都非常复杂,因为我认为在一个地方写任何东西,但我会继续学习......再次感谢大家

以上是关于如何在 Java 中修改 Mac LAF 的自动生成菜单和“关于”框?的主要内容,如果未能解决你的问题,请参考以下文章

用于 java swing 应用程序的开源 laf[外观]

IntelliJ Idea主菜单栏从Mac菜单栏移开

在哪里或如何下载适用于 NetBeans 8.2 的 Darcula LAF?

如何修改vmware的mac地址

更改 Nimbus LaF 处理 JTree 节点突出显示的方式

java如何根据实体类图生成sql脚本?