Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java KeyListener,按键与键入_Java_Swing_Jframe_Key Bindings_Keylistener - Fatal编程技术网

Java KeyListener,按键与键入

Java KeyListener,按键与键入,java,swing,jframe,key-bindings,keylistener,Java,Swing,Jframe,Key Bindings,Keylistener,我有一个JFrame(嗯,一个扩展JFrame的类),我想在按下F5键时执行一个操作。所以,我让这个类实现了KeyListener。于是,出现了三种方法:按键、释放和键入 我应该使用以下哪种方法来监听F5是否被按下?按键还是打字?我目前有以下内容,但当我按F5时,它不会打印任何内容 public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_F5) System.out.println("F5

我有一个JFrame(嗯,一个扩展JFrame的类),我想在按下F5键时执行一个操作。所以,我让这个类实现了KeyListener。于是,出现了三种方法:按键、释放和键入

我应该使用以下哪种方法来监听F5是否被按下?按键还是打字?我目前有以下内容,但当我按F5时,它不会打印任何内容

public void keyPressed(KeyEvent e) {
    if(e.getKeyCode() == KeyEvent.VK_F5)
        System.out.println("F5 pressed");
}

public void keyReleased(KeyEvent arg0) {
    // TODO Auto-generated method stub

}

public void keyTyped(KeyEvent arg0) {
    // TODO Auto-generated method stub

}
我个人会使用KeyRelease来实现这一点。只有当他们举起手指时,它才会开火


请注意,keyTyped只适用于可以打印的内容(我不知道F5是否可以打印),我相信如果按住该键,它会一次又一次地触发。这对类似于。。。在屏幕上移动一个字符或其他东西。

两者都不是。您不应该使用KeyLIstener


Swing设计用于键绑定。阅读上Swing教程的部分。

如果您想要立即生效,则应使用
按键
;如果您想要在释放按键后生效,则应使用
按键释放
。您不能使用
keyTyped
,因为F5不是字符<代码>键入键仅在按下字符时激活。

您好,谢谢您的回答。请看我修改过的问题如果你没有从中得到什么,那么可能是因为你忘记添加你的听众。如果在任何地方都没有
addListener
方法调用,则需要添加一个。如果你发布一些代码,我可以提供帮助。是的,忘记添加Listener只是为了录制,我通常使用
keyreased
而不是
keyressed
,这样如果他们真的不想做他们正在做的事情,他们可以按住键而不是松开,然后按escape。然后,我将一个布尔值保存在是否按下escape的内部(如果按下escape键,则将布尔值设置为true;如果按下escape键,则将布尔值设置为false),如果按下escape键,则不允许他们执行任何其他操作。只是一些值得思考的东西。干杯…在用右边的数字键盘键入字符代码的同时按住ALT键,就可以完成unicodes。这就是为什么我以前从来没有用java听过它们…Swing设计为使用键绑定,而不是键侦听器。好建议。我是个皈依者,应该早就知道;)请不要使用短信缩写。另外,这个问题早就得到了回答。除非响应添加了以前答案中缺少的重要内容,否则最好不要恢复旧线程。每个代码段都应该至少有一到两句话解释您要解决的问题的哪一部分。如上所述,是keyListener()侦听关键事件。在用addKeyListener()响应keyPressed()的代码之前。我提供了一段代码,作为您可以修改的示例。
private String message;
private ScreenManager s;


//Here is an example of code to add the keyListener() as suggested; modify 
public void init(){
Window w = s.getFullScreenWindow();
w.addKeyListener(this);

public void keyPressed(KeyEvent e){
    int keyCode = e.getKeyCode();
        if(keyCode == KeyEvent.VK_F5)
            message = "Pressed: " + KeyEvent.getKeyText(keyCode);
}
private String message;
private ScreenManager s;


//Here is an example of code to add the keyListener() as suggested; modify 
public void init(){
Window w = s.getFullScreenWindow();
w.addKeyListener(this);

public void keyPressed(KeyEvent e){
    int keyCode = e.getKeyCode();
        if(keyCode == KeyEvent.VK_F5)
            message = "Pressed: " + KeyEvent.getKeyText(keyCode);
}