2012-03-31 123 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)); 
     } 
    });