Re: menu accelerator



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.


I dont know what is SSCCE but now I know.

Holy Sh*t!
F1 working!
I am dump and I spend your time for nothing!
I found a clause "if (key == 0 || modifier == 0) ..." in my code...
What a SHAME.
Sorry.
.