02. oktober 2001 - 12:46Der er
6 kommentarer og 2 løsninger
Jmenu
Hej
Jeg har et problem med min Jmenu. Jeg har lavet en menu som en normal menu i fx. IE. dvs. vælger man et menupunkt, kommer menuen, og klikker man et andet sted på skræmen forsvinder den. Mit problem er bare at klikker man på en JmenuItem i selve menuen fanger den ikke min actionlistener på JmenuItem, og lukker menuen. Jeg har implementeret en focuslistener og added den til min Jmeneu se kode (redigeret).
private void initComponents(){ menuBar = new JMenuBar(); menu = (JMenu)getMenu(); menu.addFocusListener(this); menuBar.add(menu); getContentPane().setLayout(new java.awt.GridLayout(1, 1)); setJMenuBar(menuBar); }
public JMenu getMenu(){
menu = new JMenu(\"Filer\"); submenu = new JMenu(\"Ny\");
sessionData = getParameter(\"liste\");
StringTokenizer st = new StringTokenizer(sessionData, \"@\"); while (st.hasMoreTokens()) {
menuItem = new JMenuItem(st.nextToken()); menuItem.addActionListener(this); submenu.add(menuItem); }
menu.add(submenu); menu.addSeparator();
menuItemGem = new JMenuItem(\"Gem..\"); menu.add(menuItemGem); menuItemGem.addActionListener(this);
return menu; }
public void actionPerformed(ActionEvent e) { Object os = e.getSource();
if(os == menuItemGem) { System.out.println(\"Gem den aktuelle file\"); } }
public void itemStateChanged(ItemEvent e){}
public void focusGained(FocusEvent e){ System.out.println(\"har fokus\"); }
public void focusLost(FocusEvent e){ menu.setPopupMenuVisible(false); menu.updateUI(); }
aner det ikke, har ikke rodet med menuer ... men det virker vel på samme måde som med ActionListners, nemlig at du sammenligner e.getSource() med menupunktet ... ?
Du kan lave en specifik action listener for hvert menu punkt, så har du helt styr på hvad der sker når man vælger et menupunkt. Det er især velegnet hvis der skal meget kode til ved det enkelte menupkt.
Jeg har brugt følgende kode i et program:
about = new JMenuItem(\"About FS\"); about.addActionListener(new aboutMenuHandler()); about.setAccelerator(KeyStroke.getKeyStroke(\'A\', java.awt.Event.CTRL_MASK, false));
hvor aboutMenuHandler er en klasse der implementerer ActionListener...
Hvis du vil nøjes, kan du sikkert benytte Martin Schous forslag (det har jeg ikke prøvet)
Jeg har løst problemet med en mouselistener. Når musen er over menuen kan den ikke kalde menu.setPopupMenuVisible(false), men først når den forlader menuen. Men tak for hjælpen..
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.