Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Nimbus LaF设置项目边框_Java_Swing_Border_Nimbus_Jmenuitem - Fatal编程技术网

Java 使用Nimbus LaF设置项目边框

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

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

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

这在默认的金属LaF以及JGoodies PlasticXP LaF中非常有效,但在Nimbus LaF中不起作用。Nimbus忽略了所有这些属性

当我设置
item.setOpaque(true)
时,背景会被绘制,但边框仍然不显示。如何强制Nimbus使用自定义边框?

  • Nimbus-LaF
    默认情况下忽略
    setBackground
    setForeground

  • Nimbus-LaF
    默认情况下,在
    Xxx(单元格)渲染器中永远不要忽略
    setBackground
    setForeground
    (与您的问题无关)


有两种方式(通过覆盖)

  • JMenuItem
    s
    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);
  }
}