4

比較的簡単ですが、JMenuBar の背景色を設定するにはどうすればよいですか?

私はもう試した:

MenuBar m = new MenuBar() {

      void paintComponent(Graphics g) {

  Graphics2D g2 = (Graphics2D)g;
  g2.setBackground(Color.yellow);
  g2.fillRect(0, 0, getWidth(), getHeight());
}

でも何もない

4

2 に答える 2

6

MadProgrammerのアプローチでは、メニューバーの背景が 2 回ペイントされます。1回は UI によって (たとえば、Windows ではグラデーションになる可能性があり、ペイントに時間がかかります)、もう 1 回はpaintComponentメソッドのコード (古い背景の上) によってペイントされます。

メニューバー UI を BasicMenuBarUI に基づいた独自のものに置き換えることをお勧めします。

    menuBar.setUI ( new BasicMenuBarUI ()
    {
        public void paint ( Graphics g, JComponent c )
        {
            g.setColor ( Color.RED );
            g.fillRect ( 0, 0, c.getWidth (), c.getHeight () );
        }
    } );

メニューバーを作成するたびに特定のコンポーネントを使用する必要がないように、すべてのメニューバーに対してその UI をグローバルに設定することもできます。

UIManager.put ( "MenuBarUI", MyMenuBarUI.class.getCanonicalName () );

ここでの MyMenuBarUI クラスは、すべてのメニューバーに固有の UI です。

于 2012-08-10T13:28:22.030 に答える
6

まず、あなたが示したJMenuBarのは ではなく でMenuBarあり、大きな違いがあります。を使用してみて、JMenuBarを使用setBackgroundして背景色を変更します

Vulcan からのフィードバックから更新

setBackgroundさて、うまくいかない場合は、これでうまくいきます ;)

public class MyMenuBar extends JMenuBar {

    @Override
    protected void paintComponent(Graphics g) {

        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.RED);
        g2d.fillRect(0, 0, getWidth() - 1, getHeight() - 1);

    }

}
于 2012-08-09T23:20:49.493 に答える