gpt4 book ai didi

java - 如何将我的 JMenuBar 移动到 Mac OS X 上的屏幕菜单栏?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:31 26 4
gpt4 key购买 nike

当我将 JMenuBar 移动到 Mac OS X 上的屏幕菜单栏时,它会在我的窗口中菜单所在的位置留下一些空白区域;我需要删除那个空间。我正在使用

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

将我的 JMenuBar 移动到屏幕菜单栏。我使用 Mac 的 friend 报告说,如果我没有设置该属性,这会在菜单所在的位置留下一些丑陋的垂直空间。解决此问题的最佳方法是什么?

编辑:这是来 self 的来源的示例:

public static void main(String[] args) {
System.setProperty("apple.laf.useScreenMenuBar", "true");
System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Name");

JFrame frame = new JFrame("Gabby");
final DesktopMain dm = new DesktopMain();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(dm);
frame.setSize(160, 144);
frame.setLocationRelativeTo(null);
frame.setIgnoreRepaint(true);

JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);

// Populating the menu bar code goes here

frame.setJMenuBar(menuBar);
frame.setVisible(true);
}

最佳答案

根据完成的时间,在程序启动之后设置属性可能为时已晚而无法生效。相反,在启动时添加设置。

java -Dapple.laf.useScreenMenuBar=true -jar MyApplication.jar

或者,在应用程序包的 Info.plist 中设置该属性,如 Java Deployment Options for Mac OS X 中所述。 , Java Dictionary Info.plist Keys , About Info.plist KeysJava Runtime System Properties .

<key>Properties</key>
<dict>
<key>apple.laf.useScreenMenuBar</key>
<string>true</string>
...
</dict>

附录:如下所示,使用@Urs Reupke 或我本人建议的方法不会出现问题。您的(丢失的)DesktopMain 可能有问题。

Screen capture

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;

/** @see http://stackoverflow.com/questions/8955638 */
public class NewMain {

public static void main(String[] args) {
System.setProperty("apple.laf.useScreenMenuBar", "true");
System.setProperty(
"com.apple.mrj.application.apple.menu.about.name", "Name");
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {

JFrame frame = new JFrame("Gabby");
final JPanel dm = new JPanel() {

@Override
public Dimension getPreferredSize() {
return new Dimension(320, 240);
}
};
dm.setBorder(BorderFactory.createLineBorder(Color.blue, 10));

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(dm);
frame.pack();
frame.setLocationByPlatform(true);

JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);
frame.setJMenuBar(menuBar);
frame.setVisible(true);
}
});
}
}

关于java - 如何将我的 JMenuBar 移动到 Mac OS X 上的屏幕菜单栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8955638/

26 4 0