1

いくつかのパラメーターと現在選択されているメニュー項目に基づいて、ポップアップメニューのいくつかの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);
  }
}

これは、デフォルトのMetalLaFおよびJGoodiesPlasticXP LaFで非常にうまく機能しますが、NimbusLaFでは機能しません。Nimbusは、これらすべてのプロパティを無視します。

設定すると背景がペイントされますがitem.setOpaque(true)、それでも境界線が表示されません。Nimbusにカスタムボーダーの使用を強制するにはどうすればよいですか?

4

1 に答える 1

2
  • Nimbus LaFデフォルトでは、、などを無視しsetBackgroundますsetForeground

  • Nimbus LaFデフォルトでは、、、 inを無視することはありsetBackgroundませsetForegroundXxx(Cell)Renderer(質問に関連してではありません)


2つの方法があります(オーバーライドによる)

  • JMenuItems paintComponent()、、paintBorder()_paintChildren

  • Nimbusデフォルトのすべての適切なキー、

于 2013-03-27T11:36:00.573 に答える