使用键盘关闭JFrame

时间:2012-03-31 18:42:52

标签: java swing java-7 keylistener

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

------- -------- EDIT

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

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);
   }    
}

-------- --------- EDIT

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

2 个答案:

答案 0 :(得分:2)

有很多关于如何做到这一点的例子。

您需要将eventListener添加到侦听键盘输入的帧,然后关闭该帧。 试着看看: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上为我编译。

答案 1 :(得分:1)

如果您只有一个JFrame,那么这是代码。您应该在初始化组件时添加它。

addKeyListener(new KeyAdapter()
    {
        @Override
        public void keyPressed(java.awt.event.KeyEvent evt)
        {
            processWindowEvent(new WindowEvent(getWindows()[0], WindowEvent.WINDOW_CLOSING));
        }
    });