由于某些未知原因,此代码无效。
JTextComponent component = new JTextArea();
Keymap keymap = component.getKeymap();
keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_1, InputEvent.ALT_DOWN_MASK), myAction);
当我按Alt和1(不在小键盘上,字母上方的1)时,它永远不会触发myAction
。这对任何修饰符都不起作用。
此处给出的解决方案https://stackoverflow.com/a/11974908/3838784不起作用,仍未触发操作。从键映射中删除所有具有ALT作为修饰符的击键似乎也没有帮助。
答案 0 :(得分:1)
我尝试了一个示例,使用您的代码,它似乎工作正常。如果有什么不同于你的代码,你能告诉我吗?
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.text.JTextComponent;
import javax.swing.text.Keymap;
public class MyExample extends JFrame {
MyExample() {
initGUI();
} // Constructor
private void initGUI() {
// Create the button
JButton myButton = new JButton("Press ME !");
// Create the label
JLabel testLabel = new JLabel("TEST !!!");
// Set up the window
JPanel pane = (JPanel) getContentPane();
pane.setLayout(new BorderLayout());
pane.add(myButton, BorderLayout.CENTER);
pane.add(testLabel, BorderLayout.SOUTH);
JTextComponent component = new JTextArea();
pane.add(component, BorderLayout.SOUTH);
Keymap keymap = component.getKeymap();
keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_1, InputEvent.ALT_DOWN_MASK), new MyAction());
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
// setSize(600,300);
}
public static void main(String[] args) {
try {
// Set System L&F
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (UnsupportedLookAndFeelException e) {
// handle exception
} catch (ClassNotFoundException e) {
// handle exception
} catch (InstantiationException e) {
// handle exception
} catch (IllegalAccessException e) {
// handle exception
}
// new MyExample().setVisible(true);
EventQueue.invokeLater(() -> {
MyExample me = new MyExample();
me.setVisible(true);
});
}
class MyAction extends AbstractAction{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Action performed");
}
}
}