4

JMenuBarJMenuその中のオブジェクトのカスタム背景色を設定するにはどうすればよいですか?試し.setBackgroundColorましたが動作しません!

4

7 に答える 7

12

拡張する新しいクラスを作成しますJMenuBar

public class BackgroundMenuBar extends JMenuBar {
    Color bgColor=Color.WHITE;

    public void setColor(Color color) {
        bgColor=color;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(bgColor);
        g2d.fillRect(0, 0, getWidth() - 1, getHeight() - 1);

    }
}

ここで、の代わりにこのクラスを使用しJMenuBar、で背景色を設定しsetColor()ます。

于 2013-03-26T23:00:27.107 に答える
11

おそらく、メニュー項目の不透明度を変更する必要があります。

JMenuItem item= new JMenuItem("Test");
item.setOpaque(true);
item.setBackground(Color.CYAN);

UIManagerたとえば、次を使用してグローバルにこれを実現することもできます。

UIManager.put("MenuItem.background", Color.CYAN);
UIManager.put("MenuItem.opaque", true);
于 2013-03-26T23:00:38.467 に答える
6

(私が考えることができる)最も簡単な方法は、によって使用されるデフォルト値を変更することですUIManager。ただし、これはアプリケーションのすべてのメニューバーとメニュー項目に影響します...

ここに画像の説明を入力してください

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestMenuBar {

    public static void main(String[] args) {
        new TestMenuBar();
    }

    public TestMenuBar() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }

                UIManager.put("MenuBar.background", Color.RED);
                UIManager.put("Menu.background", Color.GREEN);
                UIManager.put("MenuItem.background", Color.MAGENTA);

                JMenu mnu = new JMenu("Testing");
                mnu.add("Menu Item 1");
                mnu.add("Menu Item 2");

                JMenuBar mb = new JMenuBar();
                mb.add(mnu);
                mb.add(new JMenu("Other"));

                JFrame frame = new JFrame("Test");
                frame.setJMenuBar(mb);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new JPanel());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

        });
    }

}
于 2013-03-27T00:49:46.677 に答える
2

簡単な方法は.setBackground(Color.RED)setOpaque(true)

menubar.setBackground(Color.RED); menu.setBackground(Color.yellow); menubar.setOpaque(true); menu.setOpaque(true);

これにより、メニューバーとメニューの両方に選択した色が表示されます。

于 2017-07-20T06:31:48.207 に答える
1

私が変わったときだけ私のものは働いた:

    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

に:

    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

それ以外の場合、色は同じままでした。

于 2013-04-12T16:47:10.927 に答える
0

とても簡単です。

コードは次のとおりです。

menu.setBackground(Color.DARK_GRAY);

同様に、次のような独自の色を追加できますGREEN, BLUE, DARK_GRAY, LIGHT_GRAY, BLACK, RED, etc..

これは、Javaのコンポーネントの色を変更する唯一の簡単な方法です。

注:これは、JavaSwingのすべてのコンポーネントにのみ適用されます。JavaFX、JFace、SWTでは役に立たないが、AWTとSwingでは役に立たない

ありがとうございました、

デレク・スミス

于 2019-08-10T08:00:21.347 に答える
0
public void run() {

     UIManager.put("MenuBar.background", new java.awt.Color(255, 245, 157));
     UIManager.put("MenuBar.opaque", true);                
     UIManager.put("Menu.background", new java.awt.Color(255, 245, 157));
     UIManager.put("Menu.opaque", true);
     UIManager.put("MenuItem.background",new java.awt.Color(255, 245, 157));
     UIManager.put("MenuItem.opaque", true);
     new MenuPrincipal().setVisible(true);

}

メニューバーの色は変わりませんが、残りは変わります(menuとmenuitem)

于 2020-03-27T14:46:50.143 に答える