Java 使用Nimbus LaF设置项目边框
我正在根据一些参数和当前选择的菜单项修改弹出菜单中某些JMenuItems的外观 这是一段伪代码(伪代码,因为它不显示所有复杂的流程,只显示设置菜单项属性的相关部分): 这在默认的金属LaF以及JGoodies PlasticXP LaF中非常有效,但在Nimbus LaF中不起作用。Nimbus忽略了所有这些属性 当我设置Java 使用Nimbus LaF设置项目边框,java,swing,border,nimbus,jmenuitem,Java,Swing,Border,Nimbus,Jmenuitem,我正在根据一些参数和当前选择的菜单项修改弹出菜单中某些JMenuItems的外观 这是一段伪代码(伪代码,因为它不显示所有复杂的流程,只显示设置菜单项属性的相关部分): 这在默认的金属LaF以及JGoodies PlasticXP LaF中非常有效,但在Nimbus LaF中不起作用。Nimbus忽略了所有这些属性 当我设置item.setOpaque(true)时,背景会被绘制,但边框仍然不显示。如何强制Nimbus使用自定义边框? Nimbus-LaF默认情况下忽略setBackground
item.setOpaque(true)
时,背景会被绘制,但边框仍然不显示。如何强制Nimbus使用自定义边框?
默认情况下忽略Nimbus-LaF
,setBackground
等setForeground
默认情况下,在Nimbus-LaF
Xxx(单元格)渲染器中永远不要忽略
,setBackground
(与您的问题无关)setForeground
有两种方式(通过覆盖)
sJMenuItem
,paintComponent()
,paintBorder()
paintChildren
- 一切正常
paintComponent()
和paintBorder()
。我不是很高兴这样做,但这是最容易做到的,而不打破其他拉夫。
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);
}
}