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

-------- 편집 --------- 나는 주위 물체를 이동하기 위해 다시 그리기 방법을 사용하고 또한

화면과 나는 그들 중 일부가 다른 속도로 이동하기를 원한다. 나는 숫자를 조정하는 것이 정말 옵션이 아니므로 위치 지정을 위해 난수 생성기를 사용하고 있습니다. 제발 도와주세요.

+0

이 이벤트가 발생할 때마다 KeyListener를 만들고 프로그램을 닫으십시오. – dexametason

답변

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

+0

흠 .. 그래. 좋아. 내 코드에는 많은 오류가있었습니다. 미안합니다! 실습 예제로 업데이트하겠습니다. –

+0

대단히 감사합니다 !! – user1305374

1

하나의 JFrame 만있는 경우의 코드는 다음과 같습니다. 구성 요소를 초기화 할 때 추가해야합니다.

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