2011-08-09 6 views
4

방금 ​​자바를 사용하기 시작했습니다.별로 좋지 않으므로 도움이된다면 정말 멋져요! Swing 응용 프로그램을 만들고 있는데 특정 키를 눌렀을 때만 응용 프로그램을 닫고 싶습니다. 이것을 할 수있는 방법이 있습니까?특정 키를 눌렀을 때 창을 닫습니다.

+0

이전 AWT 솔루션 인 KeyListener를 사용하지 마십시오. (필자는 모든 제안을 downvote해야합니다.) Swing은 Key Bindings와 함께 사용하도록 설계되었습니다. – camickr

+0

프레임 장식의 닫기 버튼에 관심이 있으십니까? 키 리스너와 바인딩 모두 [여기] (http://stackoverflow.com/questions/6887296)에 나와 있습니다. – trashgod

답변

0

반응하려는 스윙 구성 요소에 키 입력을 처리하는 핸들러를 등록해야합니다. 핸들러에서 창을 닫으십시오. 당신이 키를 누르면 일단 프로그램이 즉시 반응 할 때

는 키보드 이벤트와 KeyListener 인터페이스를 사용하여, 관찰자 ​​패턴 http://www.javaworld.com/javaworld/javaqa/2001-05/04-qa-0525-observer.html

2

입니다. ActionListener 또는 ItemListener 인터페이스와 달리, KeyListener 인터페이스는 방법을 구현해야합니다

  • void keyPressed(KeyEvent)을 -하는 방법은 키가

  • void keyReleased(KeyEvent)

    을 누르는 순간이라고 - 방법은 순간 불리는 키가 릴리스 됨

  • void keyTyped(KeyEvent) - 키를 눌렀다가 놓은 후에 호출되는 메서드

이러한 모든 메서드가 코드에 있어야하지만 내부에 문을 사용할 필요는 없습니다.

getKeyChar() 메서드를 호출하여 어떤 키를 눌렀는지 확인하십시오. 메서드가 의미하는 것처럼이 값은 char 값으로 반환됩니다. 그러나이 방법은 문자 키, 숫자 키 및 구두점 키에 대해서만 작동합니다.

키보드의 키를 모니터링하려면 getKeyCode() 메서드를 사용하십시오. 이 값은 int 값으로 반환됩니다. 당신은 값을 인수로 사용하여 getKeyText() 메서드를 사용하면됩니다. 키의 실제 이름 (예 : 집, F2 등)이 반환됩니다.

특정 키를 눌러야 만 창을 닫을 수 있습니다. 다음은 그 일에 대해 갈 것입니다 방법의 예는 다음과 같습니다

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

public class example extends JFrame implements KeyListener { 
    JLabel closeLabel = new JLabel("Press the \"x\" key to close me!"); 

    public example() { 
     super("Close me!"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     closeLabel.addKeyListener(this); 
     closeLabel.setFocusable(true); 
     add(closeLabel); 
     pack(); 
     setVisible(true); 
    } 

    public void keyTyped(KeyEvent input) { 
     char key = input.getKeyChar(); 
     if (key == 'x') System.exit(0); 
    } 

    public void keyPressed(KeyEvent txt) { 
     //do nothing 
    } 

    public void keyReleased(KeyEvent txt) { 
     //do nothing 
    } 
} 
+0

당신의 접근 방식은'closeLabel'에 포커스가 있어야합니다, 맞습니까? 어떻게 전체 창에 대한 지원을 추가하고 키 누르기를 숨길 수있는 컨트롤을 허용하지 않습니까? –

+0

@Dilium 프레임의 모든 구성 요소에 'KeyListener'를 추가해야합니다. 또한 일부 구성 요소에는 포커스가 없습니다 (예 : 'JLabel'). 'someComponent.setFocusable (true);' – fireshadow52

+3

포커스 문제를 피하려면 KeyListener를 사용하지 말고 대신 키 바인딩을 사용하십시오. –

1

당신은 KeyListener 인터페이스에서 살펴해야하고, 난 당신이 명확하게 일을의 스윙 방법을 설명 문서의이 종류를 읽으십시오, here

+0

+ 1의 스윙 방법은 KeyListener와 관련이 없기 때문에 KeyLIstener에 관한 주석은 잘못되었습니다. 그러나, 나는 Using Menus에 관한 스윙 튜토리얼에 대한 링크를 좋아한다. 이것은 자동으로 바인딩을 생성하여 메뉴 항목을 생성 한 이후로 키 바인딩을 사용하는 쉬운 방법입니다. 메뉴를 사용하면 프로그램에서 사용할 수있는 키 스트로크를 스스로 문서화 할 수 있습니다. – camickr

9

다른 X 답변에 대한 답변을 보려면 KeyListener를 사용하지 말고 키 바인딩을 사용하는 것이 좋습니다. 이것은 상위 레벨의 추상화이며 KeyListeners를 사용하여 오는 포커스 문제를 피하는 데 도움이됩니다. 키 바인딩에 대한 자세한 내용은 여기에서 스윙 튜토리얼을 참조하십시오. How to use Key Bindings

+0

+1, 키 바인딩은 스윙을 사용할 때 갈 수있는 방법입니다. – camickr

관련 문제