背景
我已经提交了错误报告。一旦处理,将用报告更新帖子。
除了我在mcve中发布的代码外,没有其他代码在运行;运行这个程序时没有其他jvm处于活动状态(尽管我认为这不重要)。
我没有安装任何自定义系统ui的程序。
目标环境
Java 1.8.0_201
Windows 10 Home Edition
测试JDK
jdk 9至jdk 15
由第三方测试
乔治z.-windows 7-可以复制错误
davidkroukamp-windows10,jdk10-可以重现bug
camickr-windows10,jdk11-可以复制错误
canvas(discord)-windows10-可以重现bug
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
单击菜单
调整窗口大小
再次单击菜单
mcve结果
针对jdk 11的windows 10计算机(尽管在所有已测试的主要java发行版上的结果相似):
菜单在调整窗口大小前后提供不同的渲染结果
有重叠的突出显示-突出显示的“新…”出血到“报告”菜单项。
有时“new…”箭头会与“report”重叠,如下所示。
windows 7-图片作者:george z
windows 10,jdk-画布图像(discord)
新发现
如果“report”菜单项的一部分超出windows边界,则不会出现突出显示错误。
这是通过更新菜单的弹出偏移量来实现的:
// apply this before creating any components
UIManager.put("Menu.menuPopupOffsetX", 20);
UIManager.put("Menu.menuPopupOffsetY", 20);
工作在。。。
macos catalina 10.15.7-图像由pawnee(discord)
问题
做 JMenu
正确使用系统l&f,如果是这样,我缺少什么来获得正确的结果(无额外间距,无高光渗入其他组件)
暂无答案!
目前还没有任何答案,快来回答吧!