2012-03-31 171 views
0

我正在为大学的一个小型项目创建一个基本的屏幕保护程序,并且在打开它后无法关闭JFrame。我已经删除了外部面板,以使它看起来是一个合适的屏幕保护程序,但我现在必须打开任务管理器关闭程序,我希望窗口关闭,当我按下键盘上的按钮时,我该怎么做? 在此先感谢。使用键盘关闭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); 
    }  
} 

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

而且我使用repaint方法来移动物体屏幕和我想让他们中的一些人以不同的速度移动。我使用随机数字发生器进行定位,所以调整数字并不是一个真正的选择,请帮助。

+0

只要创建KeyListener并在发生此事件时关闭程序。 – dexametason 2012-03-31 18:49:15

回答

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上为我编译。

+0

感谢迄今为止的帮助,但是当我输入给定的代码并添加导入并实现EventListener时,我仍然在addEventListener的代码的最后一行发现错误,说'找不到符号'',我无法弄清楚怎么了,请帮忙。 – user1305374 2012-03-31 22:36:48

+0

嗯..是的没错。我的代码有很多错误。对于那个很抱歉!我将用一个工作示例进行更新。 – 2012-04-01 15:49:03

+0

非常感谢! – user1305374 2012-04-01 18:42:54

1

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

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