我刚刚开始使用java而且不是很好,所以如果你能帮助我那就太棒了!我正在制作一个Swing
应用程序,并且只有在按下某个键时才想关闭它。有没有办法做到这一点?
答案 0 :(得分:9)
在这里与其他X答案相反,我建议你不要使用KeyListener而是使用键绑定。这是一个更高级别的抽象,可以帮助您避免使用KeyListener时出现的焦点问题。您可以在这里的Swing教程中找到有关键绑定的更多信息:How to use Key Bindings
答案 1 :(得分:2)
如果希望程序在按下某个键后立即作出反应,则可以使用键盘事件和KeyListener
界面。与ActionListener
或ItemListener
接口不同,KeyListener
接口必须实现三个方法:
void keyPressed(KeyEvent)
- 一种称为按键的方法
void keyReleased(KeyEvent)
- 一种称为释放密钥的方法
void keyTyped(KeyEvent)
- 按下并释放按键后调用的方法
虽然您的代码中必须包含所有这些方法,但您不必在其中包含任何语句。
调用getKeyChar()
方法找出按下了哪个键。如方法所示,这将返回为char
值。但是,此方法仅适用于字母键,数字键和标点符号键。
要监控键盘上的任何键,请使用getKeyCode()
方法。这将作为int
值返回。您可以使用getKeyText()
方法跟进,并以int
值作为参数。这将返回密钥的实际名称(即Home,F2等)。
只有在按下某个键时才需要关闭窗口。下面是一个如何执行此操作的示例:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class example extends JFrame implements KeyListener {
JLabel closeLabel = new JLabel("Press the \"x\" key to close me!");
public example() {
super("Close me!");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
closeLabel.addKeyListener(this);
closeLabel.setFocusable(true);
add(closeLabel);
pack();
setVisible(true);
}
public void keyTyped(KeyEvent input) {
char key = input.getKeyChar();
if (key == 'x') System.exit(0);
}
public void keyPressed(KeyEvent txt) {
//do nothing
}
public void keyReleased(KeyEvent txt) {
//do nothing
}
}
答案 2 :(得分:1)
你必须看一下KeyListener
界面,我建议你阅读这篇文章,清楚地解释一下做事的方式,here
答案 3 :(得分:0)
添加KeyListener
并检查您的密钥是否已被按下。这是一个如何做到这一点的教程。 http://download.oracle.com/javase/tutorial/uiswing/events/keylistener.html
答案 4 :(得分:0)
你必须注册一个处理程序来处理你想要反应的swing组件上的keypressed。在处理程序上,关闭窗口。
这是观察者模式 http://www.javaworld.com/javaworld/javaqa/2001-05/04-qa-0525-observer.html