我想听JFrame内部按下的F3键。 这怎么可能?
类似这样的东西:
this.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
if (e.getKeyCode() == F3)
MyFrame.this.dispose();
}
});
答案 0 :(得分:0)
必须将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);
}
答案 1 :(得分:0)
如果我想在JFrame中执行this.getInputMap(),这是不可能的
因为JFrame不是JComponent。
您将键绑定添加到JComponent。在这种情况下,您可以将键绑定添加到JFrame的“根窗格”。
请阅读How to Use Root Panes的Swing教程中的部分,以获取基本信息。
我还向您展示了如何访问上面在Key Bindings上提供的链接中的根窗格。
答案 2 :(得分:0)
使用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();
}
}