java - Making a JButton act like a JMenu -


i have following code jmenubar (this code has been taken free java program call jguid , edited personal purposes)

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);     }  } 

my aim make jbutton appear jmenu. entail button changes colour when interacting rest of jmenubar not when hover on it. example if had clicked on jmenu m_file , hovered on jbutton background change, if not interacting jmenubar should not change background when hover on jbutton. next thing required jmenubar treats jmenu. mean in sense when f10 clicked , first jmenu selected. after can click on right arrow on arrow key pad on keyboard, select next jmenu. using method of navigation skips jbutton , not allow interact jbutton in anyway. mean in sense if interact jmenu , hover on jbutton jmenubar shows still hovering on jmenu (see image).

two interaction @ once

so suppose have 3 questions.

  1. how jbutton change colour if jmenubar being interacted with?

  2. how jmenubar treat jbutton jmenu in senses described?

  3. is aware of exact colour of background of jmenu when hover on it? since prefer change jbutton's background same colour of jmenu's background instead of being red.

thanks,

dan


Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -