Re: menu accelerator
To: comp.lang.java.gui
Chameleon wrote:
Andrew Thompson wrote:
Paste an SSCCE here and we
might be able to see what you are doing wrong,
I am trying to say, how can I assign the "F1" accelerator to a
menuitem. The following code doesn't work:
---------------------
JMenuBar jmb = new JMenuBar();
JMenu jm = new JMenu("Help");
JMenuItem jmi = new JMenuItem("Help Index");
jmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
jmi.addActionListener(listener);
jm.add(jmi);
jmb.add(jm);
---------------------
I don't want "Shift+F1", "Ctrl+F1", etc. I want "F1".
Thats not an SSCCE!
You have a bug in the code you are *not* showing us.
Here's a working SSCCE based on your snippet:
-----------------------------------------8<-----------------------------------
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
public class TestAccellerator implements ActionListener {
TestAccellerator() {
// So I don't need to edit Chameleon's code at all
ActionListener listener = this; // ick.
// Chameleon's snippet *exactly* as in newsgroup
JMenuBar jmb = new JMenuBar();
JMenu jm = new JMenu("Help");
JMenuItem jmi = new JMenuItem("Help Index");
jmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
jmi.addActionListener(listener);
jm.add(jmi);
jmb.add(jm);
// end of Chameleon's snippet
JPanel p = new JPanel();
p.add(new JLabel("Panel"));
JFrame f = new JFrame("Test Accellerator");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(p);
f.setJMenuBar(jmb);
f.pack();
f.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
System.out.printf("Event: command '%s' from object '%s'\n", e
.getActionCommand(), e.getSource());
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestAccellerator();
}
});
}
}
-----------------------------------------8<-----------------------------------
When I press F1 I get the output I expected.
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24