我正在基于某些参数和当前选择的菜单项在弹出菜单中修改某些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使用我的自定义边框?
答案 0 :(得分:2)
Nimbus LaF
会忽略setBackground
,setForeground
等。
Nimbus LaF
绝不会忽略setBackground
中的setForeground
,Xxx(Cell)Renderer
(与您的问题无关)
有两种方式(通过覆盖)
JMenuItem
s paintComponent()
,paintBorder()
,paintChildren
所有正确的Keys in Nimbus Defaults,