如何通过按下转义键关闭JInternalFrame?

时间:2016-08-22 14:27:37

标签: java swing keylistener jinternalframe jdesktoppane

我使用JFrame创建了一个JDesktopPane,我在其中调用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 个答案:

答案 0 :(得分: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,并在按下escape后调用JInternalFrame上的dispose方法,而不是在此框架中实现keylistener。这完全取决于哪个GUI组件具有输入焦点。