如何解决为什么使用 System L&F 时 JMenu 无法正确呈现?
错误报告
这已被确认为错误。您可以在此处跟踪:
https://bugs-stage.openjdk.java.net/browse/JDK-8258934
背景
目标环境
Java 1.8.0_201
Windows 10 Home Edition
经过测试的 JDK
- JDK 8 到 JDK 15
由第三方测试
- George Z. - Windows 7 - 可以重现错误
- David Kroukamp - Windows 10、JDK 10 - 可以重现错误
- camickr - Windows 10、JDK 11 - 可以重现错误
- Canvas (discord) - Windows 10 - 可以重现错误
- Pawnee (discord) - macOS Catalina 10.15.7,JDK 15 - 无法重现错误
MCVE
import javax.swing.*;
public class Demo {
public static void main(String[] args) {
SwingUtilities.invokelater(Demo::launchUI);
}
private static void launchUI() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | illegalaccessexception | UnsupportedLookAndFeelException e) {
e.printstacktrace();
}
JFrame frame = new JFrame();
JMenuItem report = new JMenuItem("Report");
JMenu newMenu = new JMenu("New...");
JMenu fileMenu = new JMenu("File");
JMenuBar bar = new JMenuBar();
newMenu.add(report);
fileMenu.add(newMenu);
bar.add(fileMenu);
frame.setJMenuBar(bar);
frame.pack();
frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
复制步骤
MCVE 结果
针对 JDK 11 的 Windows 10 机器(尽管在所有经过测试的主要 Java 发行版上的结果相似):
- 有时“New...”的箭头会与“Report”重叠,如下所示。
Windows 10,JDK - 图片来自 Canvas (discord)
新发现
如果“报告”菜单项的一部分在窗口边界之外,则不会出现突出显示错误。
这是通过更新菜单的弹出偏移来实现的:
// apply this before creating any components
UIManager.put("Menu.menuPopupOffsetX",20);
UIManager.put("Menu.menuPopupOffsetY",20);
适用于...
问题
JMenu
是否与 System L&F 一起正常工作,如果是,我缺少什么才能获得正确的结果? (没有额外的间距,没有高光渗入其他组件)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。