【问题标题】:Setting JMenuItems border with Nimbus LaF使用 Nimbus LaF 设置 JMenuItems 边框
【发布时间】:2013-03-27 11:28:19
【问题描述】:

我正在根据一些参数和当前选择的菜单项在弹出菜单中修改一些 JMenuItems 的外观。

这是一段伪代码(伪代码,因为它没有展示所有复杂的流程,而只展示了设置菜单项属性的相关部分):

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 使用我的自定义边框?

【问题讨论】:

    标签: java swing border nimbus jmenuitem


    【解决方案1】:
    • Nimbus LaF默认忽略setBackgroundsetForeground

    • 默认情况下Nimbus LaF永远不会忽略setBackgroundsetForegroundXxx(Cell)Renderer(与您的问题无关)


    有两种方式(通过覆盖)

    【讨论】:

    • 谢谢。我已经覆盖了paintComponent()paintBorder()。这样我并不完全高兴,但这是最容易做到的,而且不会破坏其他 LaF。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    相关资源
    最近更新 更多