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).
so suppose have 3 questions.
how jbutton change colour if jmenubar being interacted with?
how jmenubar treat jbutton jmenu in senses described?
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
Post a Comment