按某个键关闭窗口

时间:2011-08-09 17:28:06

标签: java swing

我刚刚开始使用java而且不是很好,所以如果你能帮助我那就太棒了!我正在制作一个Swing应用程序,并且只有在按下某个键时才想关闭它。有没有办法做到这一点?

5 个答案:

答案 0 :(得分:9)

在这里与其他X答案相反,我建议你不要使用KeyListener而是使用键绑定。这是一个更高级别的抽象,可以帮助您避免使用KeyListener时出现的焦点问题。您可以在这里的Swing教程中找到有关键绑定的更多信息:How to use Key Bindings

答案 1 :(得分:2)

如果希望程序在按下某个键后立即作出反应,则可以使用键盘事件和KeyListener界面。与ActionListenerItemListener接口不同,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