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

How to close JInternalFrame by pressing escape key?

我用 JDesktopPane 创建了一个 JFrame,我在其中调用 JInternalFrame。现在我想通过按转义键关闭那个内部框架。

试了2-3种方法,都没有输出

  1. 我使用下面给出的代码做到了这一点:

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

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

  2. 我还尝试将 KeyListener 添加到内部框架,这样我就可以使用击键,但它也不起作用。
  3. 我再次尝试 setMnemonic 按钮作为转义按钮,如下所示:

    jButton1.setMnemonic(KeyEvent.VK_ESCAPE);
    

    但也没有输出。

您需要实现KeyListener 接口,或者添加一个Anonymous 接口。在这个例子中,我只是实现了它。

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 组件具有输入焦点。