2016-08-22 15 views
0

JFrameJDesktopPane으로 만들고 여기에 JInternalFrame을 부릅니다. 이제는 escape 키를 눌러 내부 프레임을 닫고 싶습니다.Esc 키를 눌러 JInternalFrame을 닫는 방법?

2 가지 방법을 시도했지만 결과는 표시되지 않았습니다. 나는 그것의 객체를 제공하여 내 인턴 프레임 클래스 생성자에서 방법 위에 전화했을 때

public static void closeWindow(JInternalFrame ji){ 
    ActionListener close=New ActionListener(){ 

    public void actionPerformed(ActionEvent e){ 
     ji.dispose(); 
    } 
}; 

, 나는 그것을 닫을 수 있었다 :

  1. 나는 코드를 사용하여 아래 있다고했다. 하지만 거기에 내가 생성자에 다른 코드 줄을 쓸 때. 위의 메서드 호출이 작동하지 않습니다. 도와주세요. 코드에서 문제를 찾을 수 없습니다.

  2. 또한 내부 프레임에 KeyListener을 추가하려고 했으므로 키 스트로크를 사용할 수는 있지만 작동하지 않습니다.

    jButton1.setMnemonic(KeyEvent.VK_ESCAPE); 
    

    을뿐만 아니라 더 출력을 제공하지 : 아래 탈출로

  3. 는 다시 나는 버튼에 setMnemonic에 노력했다.

+1

두 번째 방법은 갈 길이 멀 것 같습니다. KeyListener를 잘못 추가했을 가능성이 있습니다. – byxor

+1

코드의 스크린 샷을 게시하지 마세요. 코드 자체를 게시하십시오. 더 나은 도움을 받으려면 [MCVE] 또는 [단락, 자체 포함, 올바른 예] (http://www.sscce.org/)를 게시하십시오. –

+0

코드가있는 화면의 사진을 완전히 읽을 수 없습니다. – Jesper

답변

0

당신은 모든 KeyListener 인터페이스를 구현하거나 익명 하나를 추가해야합니다. 이 예제에서는 방금 구현했습니다.

import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

import javax.swing.JFrame; 

public class JInternalFrame extends JFrame implements KeyListener { 

    public JInternalFrame() 
    { 
     super(); 


     // other stuff to add to frame 
     this.setSize(400, 400); 
     this.setVisible(true); 

     this.addKeyListener(this); 
    } 

    @Override 
    public void keyTyped(KeyEvent e) { 
     // Don't need to implement this 


    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
     if(e.getKeyCode() == KeyEvent.VK_ESCAPE) { 
      System.exit(0); //Change this to dispose or whatever you want to do with the frame 
     } 

    } 

    @Override 
    public void keyReleased(KeyEvent e) { 
     //Dont need to implement anything here 

    } 

    public static void main(String[] args) 
    { 
     JInternalFrame frame = new JInternalFrame(); 
    } 

} 

이제이 언급 한 바와 같이 내부 JFrame의 경우, JDesktopPane에있는 모든 KeyListener를 구현하고이 프레임에 모든 KeyListener를 탈출을 눌러 구현하는 대신 후 JInternalFrame의에 Dispose 메서드를 호출하는 것이 좋을 것입니다. 그것은 모든 GUI 구성 요소가 입력의 초점을 가지고 있는지에 달려 있습니다.

+0

감사합니다. 이 솔루션은 컴포넌트가없는 경우에만 jinternalframe에 대해 잘 작동합니다. jlabel, jtextfield, jbutton과 같은 일부 구성 요소를 jinternalframe에 추가하면 keylistener가 작동하지 않습니다. jinternalframe에있는 다른 컴포넌트가 포커스를 얻었 기 때문에 jinternalframe을위한 keypressed 이벤트를 감지 할 수 없다고 생각합니다. 이 문제를 해결할 수 있도록 도와 주시겠습니까? – user6725738