我使用JFrame
创建了一个JDesktopPane
,我在其中调用JInternalFrame
。现在我想通过按下转义键关闭该内部框架。
我尝试了2-3种方式,但没有输出。
我是通过使用以下代码完成的:
public static void closeWindow(JInternalFrame ji){
ActionListener close=New ActionListener(){
public void actionPerformed(ActionEvent e){
ji.dispose();
}
};
当我通过提供其对象从我的实习生帧类构造函数调用上面的方法时,我能够关闭它。但是在那里我给构造函数写了一些其他的代码行。上述方法调用不起作用。请帮我。我无法在代码中找到问题。
KeyListener
添加到内部框架,因此我可以使用击键,但它也无法正常工作。我再次尝试按setMnemonic
按钮,如下所示:
jButton1.setMnemonic(KeyEvent.VK_ESCAPE);
但也没有输出。
答案 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组件具有输入焦点。