我用JDesktopPane创建了一个JDesktopPane,其中我调用了JInternalFrame。现在,我想关闭这个内部框架,按下转义键。
我试过2-3种方法,但没有输出。
KeyListener添加到内部框架中,这样我就可以使用键笔画,但它也不起作用。setMnemonic按钮作为转义按钮,如下所示:
jButton1.setMnemonic(KeyEvent.VK_ESCAPE);
但也没有输出。

发布于 2016-08-22 15:16:00
您需要实现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,并在此框架中按转义之后在JInternalFrame上调用dispose方法,而不是在此框架中实现keylistener。这都取决于哪个GUI组件具有输入的焦点。
发布于 2022-07-09 08:24:27
这个问题现在很老了,但我最近遇到了一个类似的问题。将键侦听器添加到内部框架的内容窗格,而不是内部框架本身,为我完成了这项工作。
this.getContentPane().addKeyListener(this);https://stackoverflow.com/questions/39082119
复制相似问题