[英]Setting JMenuItems border with Nimbus LaF
我正在基于某些参数和当前选定的菜单项修改弹出菜单中某些JMenuItem的外观。
这是一些伪代码(伪代码,因为它不显示所有复杂的处理流程,而仅显示设置菜单项属性的相关部分):
JMenuItem item= new JMenuItem("text");
Border border= calculateBorderForItem();
item.setBorder(border);
[...]
item.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
Color bg= calculateBackgroundForItem();
item.setBackground(bg);
}
}
这对于默认的Metal LaF以及JGoodies PlasticXP LaF很好,但是对于Nimbus LaF则不行。 Nimbus只是忽略所有这些属性。
当我设置item.setOpaque(true)
,背景被绘制,但是边框仍然没有显示。 如何强制Nimbus使用我的自定义边框?
Nimbus LaF
默认情况下忽略setBackground
, setForeground
等。
默认情况下, Nimbus LaF
永远不会忽略Xxx(Cell)Renderer
setBackground
, setForeground
(在某种程度上与您的问题无关)
有两种方法(通过覆盖)
JMenuItem
的paintComponent()
, paintBorder()
, paintChildren
Nimbus默认值中的所有正确键 ,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.