La combinación de teclas estándar para obtener ayuda es comando - ? en Mac. ¿Cómo puedo vincular esta combinación de teclas a un elemento de menú?Cómo enlazar comando-? como un acelerador de acción de swing para un menú de ayuda?
Nota: Como nuestros usuarios tienen diferentes diseños de teclado, estoy buscando una solución que no requiera el conocimiento sobre qué tecla "?" está ubicado en.
Usando KeyStroke.getKeyStroke(String)
, que javadoc dice;
Parses a string and returns a `KeyStroke`. The string must have the following syntax:
<modifiers>* (<typedID> | <pressedReleasedID>)
modifiers := shift | control | ctrl | meta | alt | button1 | button2 | button3
typedID := typed <typedKey>
typedKey := string of length 1 giving Unicode character.
pressedReleasedID := (pressed | released) key
key := KeyEvent key code name, i.e. the name following "VK_".
que tienen este código de ejemplo:
import javax.swing.*;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
public class HelpShortcut extends JFrame {
public HelpShortcut(){
// A few keystrokes to experiment with
//KeyStroke keyStroke = KeyStroke.getKeyStroke("pressed A"); // A simple reference - Works
//KeyStroke keyStroke = KeyStroke.getKeyStroke("typed ?"); // Works
KeyStroke keyStroke = KeyStroke.getKeyStroke("meta typed ?"); // What we want - Does not work
// If we provide an invalid keystroke we get a null back - fail fast
if (keyStroke==null) throw new RuntimeException("Invalid keystroke");
// Create a simple menuItem linked to our action with the keystroke as accelerator
JMenuItem helpMenuItem = new JMenuItem(new HelpAction());
helpMenuItem.setAccelerator(keyStroke);
// Install the menubar with a help menu
JMenuBar mainMenu = new JMenuBar();
JMenu helpMenu = new JMenu("Help");
helpMenu.add(helpMenuItem);
mainMenu.add(helpMenu);
setJMenuBar(mainMenu);
}
// Scaffolding
public static void main(String[] pArgs) {
HelpShortcut helpShortcut= new HelpShortcut();
helpShortcut.setLocationRelativeTo(null);
helpShortcut.setSize(new Dimension(100, 162));
helpShortcut.setVisible(true);
}
private class HelpAction extends AbstractAction {
public HelpAction() {
putValue(Action.NAME,"Help me!");
}
@Override
public void actionPerformed(final ActionEvent pActionEvent) {
JOptionPane.showMessageDialog(HelpShortcut.this,"You should ask StackOverflow!");
}
}
}
resto del mundo use F1 para Ayuda +1 – mKorbel
Eso es cierto, pero comando-? es el estándar os x para la ayuda específica de la aplicación y lo que los usuarios esperarían - ref http://support.apple.com/kb/ht1343 Otro problema interesante es que en los nuevos Macs, el valor predeterminado es tener las teclas F asignadas a funciones especiales (sonido, brillo, etc.) y no "F1", etc. para que este atajo no haga nada sin que el usuario lo habilite en las preferencias del teclado. –