Hacer que un JButton actúe como un JMenu

Tengo el siguiente código para un JMenuBar (Este código se tomó de una llamada gratuita del programa javaJGuiD y editado para fines personales)

import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.awt.Dimension;
import java.awt.Color;

public class GuiDMenuBar extends JMenuBar
{
    JMenu m_file,m_edit,m_help;
    JMenuItem mi_f_new,mi_f_open,mi_f_save,mi_f_saveas,mi_f_exit;
    JMenuItem mi_e_cut,mi_e_copy,mi_e_paste,mi_e_delete;
    JMenuItem mi_v_motif,mi_v_java,mi_v_windows,mi_v_nimbus;
    JMenuItem mi_h_help,mi_h_about;
    JButton m_code;

    public GuiDMenuBar()
    {
        setBorderPainted(true);
        makeFileMenu();
        makeEditMenu();
        makeCodeButton();
        makeHelpMenu();
    }

    void makeFileMenu()
    {
        m_file = new JMenu("File");
        m_file.setMnemonic('F');

        mi_f_new = new JMenuItem("New",new ImageIcon("icons/new_project.png"));
        mi_f_new.setMnemonic('N');
        mi_f_open = new JMenuItem("Open",new ImageIcon("icons/open_project.png"));
        mi_f_open.setMnemonic('O');
        mi_f_save = new JMenuItem("Save",new ImageIcon("icons/save.png"));
        mi_f_save.setMnemonic('S');
        mi_f_saveas = new JMenuItem("Save Java File",new ImageIcon("icons/saveas.png"));
        mi_f_saveas.setMnemonic('J');
        mi_f_exit = new JMenuItem("Exit",new ImageIcon("icons/exit.png"));
        mi_f_exit.setMnemonic('X');

        mi_f_new.setAccelerator(KeyStroke.getKeyStroke("control N"));
        mi_f_open.setAccelerator(KeyStroke.getKeyStroke("control O"));
        mi_f_save.setAccelerator(KeyStroke.getKeyStroke("control S"));
        mi_f_saveas.setAccelerator(KeyStroke.getKeyStroke("control J"));
        mi_f_exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,InputEvent.ALT_MASK));

        m_file.add(mi_f_new);
        m_file.add(mi_f_open);
        m_file.addSeparator();
        m_file.add(mi_f_save);
        m_file.add(mi_f_saveas);
        m_file.addSeparator();
        m_file.add(mi_f_exit);

        add(m_file);
    }

    void makeEditMenu()
    {
        m_edit = new JMenu("Edit");
        m_edit.setMnemonic('E');

        mi_e_cut = new JMenuItem("Cut",new ImageIcon("icons/cut.png"));
        mi_e_cut.setMnemonic('X');
        mi_e_copy = new JMenuItem("Copy",new ImageIcon("icons/copy.png"));
        mi_e_copy.setMnemonic('C');
        mi_e_paste = new JMenuItem("Paste",new ImageIcon("icons/paste.png"));
        mi_e_paste.setMnemonic('P');
        mi_e_delete = new JMenuItem("Delete",new ImageIcon("icons/delete.png"));
        mi_e_delete.setMnemonic('D');


        mi_e_cut.setAccelerator(KeyStroke.getKeyStroke("control X"));
        mi_e_copy.setAccelerator(KeyStroke.getKeyStroke("control C"));
        mi_e_paste.setAccelerator(KeyStroke.getKeyStroke("control V"));
        mi_e_delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));

        m_edit.add(mi_e_cut);
        m_edit.add(mi_e_copy);
        m_edit.add(mi_e_paste);
        m_edit.add(mi_e_delete);

        add(m_edit);
    }

    void makeHelpMenu()
    {
        m_help = new JMenu("Help");
        m_help.setMnemonic('H');

        mi_h_help = new JMenuItem("Help",new ImageIcon("icons/help.png"));
        mi_h_help.setMnemonic('H');
        mi_h_about = new JMenuItem("About");
        mi_h_about.setMnemonic('A');

        mi_h_help.setAccelerator(KeyStroke.getKeyStroke("F1"));
        mi_h_about.setAccelerator(KeyStroke.getKeyStroke("control A"));

        m_help.add(mi_h_help);
        m_help.addSeparator();
        m_help.add(mi_h_about);

        add(m_help);
    }

    void makeCodeButton()
    {
        m_code = new JButton();

        m_code.setOpaque(false);
        m_code.setContentAreaFilled(false);
        m_code.setBorder(null);
        m_code.setFocusable(false);

        m_code.setText("Code   Shift C");

        Dimension dBt = new Dimension(75,25);
        m_code.setMinimumSize(dBt);
        m_code.setPreferredSize(dBt);
        m_code.setMaximumSize(dBt);

        m_code.getModel().addChangeListener(new ChangeListener()
        {
            @Override
            public void stateChanged(ChangeEvent e) 
            {
                ButtonModel model = (ButtonModel) e.getSource();

                if(model.isRollover())
                {
                    m_code.setBackground(Color.RED);
                    m_code.setOpaque(true);
                } 

                else 
                {
                    m_code.setBackground(null);
                    m_code.setOpaque(false);
                    m_code.setContentAreaFilled(false);
                }
             }
        });

        m_code.setMnemonic('C');

        add(m_code);
    }

    public void addListeners(ActionListener al)
    {
        mi_f_new.addActionListener(al);
        mi_f_open.addActionListener(al);
        mi_f_save.addActionListener(al);
        mi_f_saveas.addActionListener(al);
        mi_f_exit.addActionListener(al);

        mi_e_cut.addActionListener(al);
        mi_e_copy.addActionListener(al);
        mi_e_paste.addActionListener(al);
        mi_e_delete.addActionListener(al);

        mi_h_help.addActionListener(al);
        mi_h_about.addActionListener(al);

        m_code.addActionListener(al);
    }

}

Mi objetivo es hacer que el JButton parezca un JMenu. Esto implicaría que el botón solo cambia de color cuando estoy interactuando con el resto de JMenuBar, no solo cuando paso el mouse sobre él. Por ejemplo, si hubiera hecho clic en el JMenum_file y luego se cernía sobre el JButton, el fondo cambiaría, sin embargo, si no estaba interactuando previamente con el JMenuBar, no debería cambiar el fondo cuando se cierne sobre el JButton. Lo siguiente que se requeriría sería que JMenuBar lo tratara como un JMenu. Me refiero a esto en el sentido de que cuandoF10 se hace clic y se selecciona el primer JMenu. Después de lo cual puede hacer clic en la flecha derecha en el teclado de flechas en su teclado, esto seleccionará el próximo JMenu. Sin embargo, el uso de este método de navegación omite el JButton y no le permite interactuar con el JButton de ninguna manera. También me refiero a esto en el sentido de que si interactúas con un JMenu y luego pasas el mouse sobre el JButton, el JMenuBar muestra que todavía estás flotando sobre el JMenu (Ver imagen).

Entonces supongo que tengo tres preguntas.

¿Cómo hace que el JButton solo cambie de color si ya se está interactuando con el JMenuBar?

¿Cómo se consigue que el JMenuBar trate al JButton como un JMenu en los sentidos que describí?

¿Alguien sabe el color exacto del fondo del JMenu cuando pasa el cursor sobre él? Dado que preferiría cambiar el fondo de mi JButton al mismo color del fondo de JMenu en lugar de que solo sea rojo.

Gracias,

Dan

Respuestas a la pregunta(0)

Su respuesta a la pregunta