我有一个具有自定义外观和感觉的 Java 应用程序,用户可以在其中在浅色和深色模式之间切换。我们拥有的功能之一是继承自 JPopupMenu 类的右键单击弹出菜单。我们添加到菜单的第一件事是 JLabel:
add( new JLabel( "<html><i> " + field.desc + "</i><br/>field = " + field.getName() + "</html>" ) );
现在,我们已经更改了 JLabels 的 L&F,它们正确地出现在应用程序样式中的很多位置。我们修改了:
Label.background
Label.foreground
此外,菜单项的 L&F 也已通过以下方式修改:
PopupMenu.border
PopupMenu.foreground
PopupMenu.background
无论如何,我们还修改了 MenuItems 上的类似属性。
问题是弹出菜单内出现的标签似乎不尊重背景颜色。在浅色和深色模式之间切换时,前景色会发生变化,但背景色不会变化。我进行了屏幕抓取并观察了背景颜色设置的颜色,但在我们的 L&F 设置中找不到任何匹配的颜色,这似乎表明它只是使用了默认的 L&F(可能是 Windows)。
这可能是一个错误吗?或者我没有设置一些我应该设置的 L&F 属性?我似乎在 Google 领域找不到任何人遇到同样的问题,因此我们将不胜感激。
最佳答案
我应该知道这就是答案:JLabel 设置为透明,因此它的背景不被尊重。像这样改变代码很好地解决了问题:
JLabel fieldInfo = new JLabel( "<html><i> " + field.desc + "</i><br/>field = " + field.getName() + "</html>" );
fieldInfo.setOpaque( true );
关于java - 为什么 JPopupMenu 中的 JLabel 不尊重其外观和感觉?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1500833/