我正在 macOS 上使用 JMenuBar 和 JMenu 开发 Java Swing 应用程序。我试图使用 setForeground(Color.RED) 方法将菜单项的文本颜色更改为红色,但它不起作用。即使应用更改后,菜单文本也始终以默认颜色显示。
我怀疑这可能与 macOS 的原生外观集成有关,该集成会覆盖一些自定义设置。这是我正在使用的代码:
package university.management.system;
import java.awt.*;
import javax.swing.*;
public class Project extends JFrame {
Project() {
setSize(1440, 900);
ImageIcon i1 = new ImageIcon(ClassLoader.getSystemResource("icons/third.jpg"));
Image i2 = i1.getImage().getScaledInstance(2250, 1500, Image.SCALE_DEFAULT);
ImageIcon i3 = new ImageIcon(i2);
JLabel image = new JLabel(i3);
add(image);
JMenuBar mb = new JMenuBar();
JMenu newInfo = new JMenu("New Information");
newInfo.setForeground(Color.RED); // Trying to set text color to red
mb.add(newInfo);
setJMenuBar(mb);
setVisible(true);
}
public static void main(String[] args) {
// Disable macOS native menu bar integration
System.setProperty("apple.laf.useScreenMenuBar", "false");
new Project();
}
}
在 JMenu 对象上使用 setForeground(Color.RED)。 禁用 macOS 本机菜单栏与
System.setProperty("apple.laf.useScreenMenuBar", "false");
的集成
尝试了 UIManager 属性:
UIManager.put("Menu.foreground", Color.RED);
UIManager.put("Menu.selectionBackground", Color.LIGHT_GRAY);
尝试使用自定义外观和感觉 (
CrossPlatformLookAndFeel
)。
尽管进行了这些尝试,菜单文本颜色在 macOS 上仍然保持不变。相同的代码在 Windows 上按预期运行。
为什么 setForeground 方法在 macOS 上不起作用? 如何在 macOS Swing 应用程序中强制执行自定义菜单文本颜色? 是否有解决方法或替代方法来实现这一目标?
您正在菜单而不是菜单栏上设置 setForeground color,如果您在菜单栏上设置 setForeground color 那么它将起作用,请检查下面
package university.management.system;
import java.awt.*;
import javax.swing.*;
public class Project extends JFrame {
Project() {
setSize(1440, 900);
ImageIcon i1 = new ImageIcon(ClassLoader.getSystemResource("icons/third.jpg"));
Image i2 = i1.getImage().getScaledInstance(2250, 1500, Image.SCALE_DEFAULT);
ImageIcon i3 = new ImageIcon(i2);
JLabel image = new JLabel(i3);
add(image);
JMenuBar mb = new JMenuBar();
JMenu newInfo = new JMenu("New Information");
//newInfo.setForeground(Color.RED); // Trying to set text color to red
mb.add(newInfo);
mb.setForeground(Color.RED);
setJMenuBar(mb);
setVisible(true);
}
public static void main(String[] args) {
// Disable macOS native menu bar integration
System.setProperty("apple.laf.useScreenMenuBar", "false");
new Project();
}
}