使用Nimbus LaF设置JMenuItems边框

时间:2013-03-27 11:28:19

标签: java swing border nimbus jmenuitem

我正在基于某些参数和当前选择的菜单项在弹出菜单中修改某些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使用我的自定义边框?

1 个答案:

答案 0 :(得分:2)

    默认情况下,
  • Nimbus LaF会忽略setBackgroundsetForeground等。

  • 默认情况下,
  • Nimbus LaF绝不会忽略setBackground中的setForegroundXxx(Cell)Renderer(与您的问题无关)


有两种方式(通过覆盖)