java - 使用键盘关闭 JFrame

标签 java swing java-7 keylistener

我正在为大学的一个小项目创建一个基本的屏幕保护程序,但在打开 JFrame 后关闭它时遇到问题。我已经删除了外部面板,以便使其看起来像一个合适的屏幕保护程序,但我现在必须打开任务管理器来关闭程序,我希望在按下键盘上的按钮时关闭窗口,我该怎么做? 提前致谢。

--------编辑--------

我已经尝试了前两种方法,但我似乎无法让它们正常工作。这是到目前为止我的框架代码:

import java.awt.Color;    
import javax.swing.JFrame;    
public class ScreensaverTest

{      
 public static void main( String[] args )       
{          
   JFrame frame = new JFrame( "Screen Saver" );
   frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   frame.setUndecorated(true);
   ScreenSaverJPanel screensaverTestJPanel = new ScreenSaverJPanel();
   frame.add( screensaverTestJPanel );
   frame.setBackground( Color.BLACK );
   frame.setVisible( true );
   frame.setLocation( 0, 0 );
   frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
   }    
}

--------编辑---------

此外,我还使用重绘方法在屏幕上移动对象,并且我希望其中一些对象以不同的速度移动。我正在使用随机数生成器进行定位,因此调整数字并不是真正的选择,请帮忙。

最佳答案

有很多关于如何执行此操作的示例。

您需要向框架添加一个事件监听器,用于监听键盘输入,然后关闭框架。 尝试看看这个:http://www.java2s.com/Code/Java/Swing-JFC/Reacttoframecloseaction.htm

您必须将事件替换为 keyboard-related ,但这是我认为最好的方法..

编辑:

要回复帖子中的编辑,您可以执行以下操作:

import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class Test {

    public Test() {
        final JFrame frame = new JFrame("Screen Saver");
        frame.validate();
        frame.setVisible(true);

        KeyAdapter listener = new KeyAdapter() {
            @Override public void keyPressed(KeyEvent e) {
                frame.dispose();
            }
        };

        frame.addKeyListener(listener);
    }

    public static void main(String[] args) {
        new Test();
    }

}

瞧 - 这应该可行。它可以在 Java 7 上为我编译。

关于java - 使用键盘关闭 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9958645/

相关文章:

java - 复制文件而不创建 FileOutputStream

Java.nio channel 和 TLS

java - 如何使用 ANT 任务生成 EJB 3 stub

java jlabel setText(str) 当str有韩文字符时错误

java - GridBagLayout 权重错误?

java - 如何在 Java 中制作这个 3 列分隔符?

java - log4j2 不写入文件

java - 2 个 Servlet 之间的通信不适用于数据库

java - 如何使用 Java7 try-with-resources 特性将资源作为参数传递

java - 使用 1.7.0_51 但语法错误, 'for each' 语句仅在源级别为 1.5 时可用