Swing Hintergrundfarbe von Submenüeinträgen setzen

Crian

Top Contributor
Ich habe in einer
Code:
JMenuBar
mehrere Menüs (Datei, Bearbeiten...) als
Code:
JMenu
. Bei diesen klappt das Einfärben per
Code:
.setBackground()
.

Nun habe ich bei einigen aber wiederum Untermenüs. Dort wird nur die Vordergrundfarbe gesetzt, die Hintergrundfarbe bleibt auf der Standardfarbe.

Was mache ich falsch?

Bei Bedarf kann ich auch versuchen, ein kleines Beispiel zu basteln, aber vielleicht löst sich das ja schon so.
 
[EDIT]Ein
Java:
        subMenu.setOpaque(true);
in Zeile 103 brachte die Lösung. Danke![/EDIT]

Hier ist das Beispiel, ich poste es und teste dann gleich mal:

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

public class MenuColoringExample {

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

    }

    private Color foregroundColor;
    private Color backgroundColor;
    private JFrame frame;

    public MenuColoringExample() {
        foregroundColor  = Color.GREEN;
        backgroundColor  = Color.RED;
        createGui();
        createMenu();
        startGui();
    }

    private void createGui() {
        JFrame frame = new JFrame("Beispiel");
        this.frame = frame;
        frame.setLocation(100, 100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());

        JPanel panel = new JPanel();
        Dimension dimension = new Dimension(800, 600);
        panel.setPreferredSize(dimension);
        panel.setMinimumSize(dimension);
        panel.setBackground(Color.WHITE);
        frame.add(panel, BorderLayout.CENTER);
    }

    private void createMenu() {
        JMenuBar menuBar = new JMenuBar();
        menuBar.setForeground(foregroundColor);
        menuBar.setBackground(backgroundColor);
        frame.setJMenuBar(menuBar);

        createTheFileMenu(menuBar);
    }

    private void createTheFileMenu(JMenuBar menuBar) {
        JMenu fileMenu = new JMenu("Datei");
        fileMenu.setForeground(foregroundColor);
        fileMenu.setBackground(backgroundColor);
        fileMenu.setMnemonic('d');
        menuBar.add(fileMenu);

        {
            JMenuItem someMenuItem = new JMenuItem("Irgendwas", 'i');
            someMenuItem.setAccelerator(KeyStroke.getKeyStroke('I',
                    Event.CTRL_MASK));
            someMenuItem.setForeground(foregroundColor);
            someMenuItem.setBackground(backgroundColor);
            fileMenu.add(someMenuItem);
        }

        fileMenu.addSeparator();

        createSubMenu(fileMenu);

        fileMenu.addSeparator();

        {
            JMenuItem exitMenuItem = new JMenuItem("Programm beenden", 'b');
            exitMenuItem.setAccelerator(KeyStroke.getKeyStroke(
                    KeyEvent.VK_F4, Event.ALT_MASK));
            exitMenuItem.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    frame.dispose();
                }
            });
            exitMenuItem.setForeground(foregroundColor);
            exitMenuItem.setBackground(backgroundColor);
            fileMenu.add(exitMenuItem);
        }
    }

    private void createSubMenu(JMenu superMenu) {
        JMenu subMenu = new JMenu("Datei");
        subMenu.setForeground(foregroundColor);
        subMenu.setBackground(backgroundColor);
        subMenu.setMnemonic('d');
        superMenu.add(subMenu);

        {
            JMenuItem newMenuItem = new JMenuItem("Irgendwas", 'i');
            newMenuItem.setForeground(foregroundColor);
            newMenuItem.setBackground(backgroundColor);
            subMenu.add(newMenuItem);
        }
    }

    private void startGui() {
        frame.pack();
        frame.setVisible(true);
    }

}
 

Neue Themen


Zurück
Oben