2016-08-22 124 views
0

我创建了一个JFrameJDesktopPane,其中我打电话给JInternalFrame。现在我想通过按下退出键来关闭内部框架。如何通过按Esc键关闭JInternalFrame?

我试过2-3种方法,但没有输出。

  1. 我这样做,通过使用代码如下:

    public static void closeWindow(JInternalFrame ji){ 
        ActionListener close=New ActionListener(){ 
    
        public void actionPerformed(ActionEvent e){ 
         ji.dispose(); 
        } 
    }; 
    

    当我从上面我的实习生框架类的构造方法中调用由提供它的对象,我可以将其关闭。但是当我在构造函数中写入一些其他代码行时。上述方法调用不起作用。请帮帮我。我无法在代码中找到问题。

  2. 此外我试图添加KeyListener内部框架,所以我能够使用按键笔画,但它也不起作用。
  3. 我又一次试图setMnemonic到按钮,如下逃脱

    jButton1.setMnemonic(KeyEvent.VK_ESCAPE); 
    

    而且也没有给出输出。

+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的按键事件。你能帮我解决这个问题吗? – user6725738