我想听我在JFrame中按下的F3键。这怎么可能?
像这样的东西:
this.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
if (e.getKeyCode() == F3)
MyFrame.this.dispose();
}
});
您必须使用keyPressed作为功能键。尝试此代码并按键。功能键不会触发键入事件。
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(200,200);
frame.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
System.out.println("from keyTyped: " + e.getKeyCode());
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("from keyPressed: " + e.getKeyCode());
}
@Override
public void keyReleased(KeyEvent e) {
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
如果我想在我的JFrame中执行this.getInputMap(),这是不可能的
因为JFrame不是JComponent。
您将键绑定添加到JComponent。在这种情况下,您可以将Key Bindings添加到JFrame的“根窗格”中。
阅读How to Use Root Panes上Swing教程中的部分以获取基本信息。
我还向您展示了如何访问我在Key Bindings上面提供的链接中的根窗格。
使用Benson99的解决方案作为跳板,我认为以下应该可行。
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class KeyListenFrame extends JFrame {
public KeyListenFrame() {
JFrame frame = new JFrame();
frame.setTitle("Key Listener Frame - Press F3 to close frame");
frame.setSize(600, 300);
frame.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_F3) {
System.out.println("Pressed " + e.getKeyCode());
System.out.println("Closing frame");
frame.dispose();
} else {
System.out.println("Pressed " + e.getKeyCode());
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
KeyListenFrame keyListenFrame = new KeyListenFrame();
}
}