Ich bin überrascht, dass KeyStroke für Sie funktioniert, da das Tab-Zeichen im Allgemeinen von dem Fokus-Subsystem behandelt wird.
Es funktioniert nicht für mich. Ich verwende JDK8 unter Windows 7:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TabSSCCE extends JPanel
{
public TabSSCCE()
{
Action tab = new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("key typed");
}
};
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke('1'), "typed");
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke('a'), "typed");
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke('\t'), "typed");
getActionMap().put("typed", tab);
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("TabSSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TabSSCCE());
frame.setLocationByPlatform(true);
frame.setSize(100, 100);
frame.setVisible(true);
}
public static void main(String[] args)
{
EventQueue.invokeLater(() -> createAndShowGUI());
/*
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
*/
}
}
Funktioniert der obige Code für Sie?
Nur die "1" und "a" funktionieren für mich. Die Tab-Taste funktioniert nicht für mich.
Wenn nicht, können Sie dann eine einfache SSCCE veröffentlichen, die zeigt, wie Sie diese verwenden?
Edit:
Der obige Code wird mit einem der folgenden arbeiten:
frame.setVisible(true);
frame.setFocusTraversalKeysEnabled(false);
oder Sie können die Fokus-Traversal-Tasten für das Panel deaktivieren:
public TabSSCCE()
{
setFocusable(true);
setFocusTraversalKeysEnabled(false);
...
}
persönlich bevorzugen 'KeyStroke .getKeyStroke (KeyEvent.VK_TAB, 0) 'selbst – MadProgrammer