如何使用keyListener关闭jframe

时间:2012-01-02 16:09:02

标签: jframe dispose

我正在用java编写一个简单的幻灯片程序。在那个程序中,我想在新窗口中显示像powerpoint这样的幻灯片。

我有主要的gui,它有单例模式,因此,我在我的MainGUI中创建我的SlideShowGUI,

SlideShowGUI与此代码http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/uiswing/examples/layout/BorderLayoutDemoProject/src/layout/BorderLayoutDemo.java

非常相似

我使用以下代码更改了createAndShowGUI()方法,以删除标题栏并将其最大化,如powerpoint幻灯片模式

public static void createAndShowGUI() {
    JFrame frame = new JFrame("BorderLayoutDemo");
    frame.addKeyListener(key);
    addComponentsToPane(frame.getContentPane());
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    frame.setUndecorated(true); 
    frame.setVisible(true);
}

在MainGUI中我有按钮,在ButtonHandler中我执行以下代码:

ChakmaSystem.getInstance().getGui().getSlideShowGUI().createAndShowGUI();

其中ChakmaSystem.getInstance()。getGui()返回MainGUI,而getSlideShowGUI()是SlideShowGUI的getter方法。

在SlideShowGUI中,我添加了自己的KeyListener,它跟踪左右和转义按钮。左右工作正常,但是,我希望转义按钮仅关闭我的SlideShowGUI窗口。

为此,在我的keylistener中,我写了以下代码:

// Escape Case
else if(keyCode == 27){
            ChakmaSystem.getInstance().getGui().getSlideShowGUI().dispose();
        }

我知道,当我按下逃生时它会碰到这种情况,但窗户不会关闭。

我该怎么办?

感谢。

2 个答案:

答案 0 :(得分:1)

仅对于仍在寻找它的人-我关闭程序的方法非常非常简单:

if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {
    System.exit(1);
}

希望这会有所帮助。

答案 1 :(得分:0)

这有用吗?

// Escape Case
else if(keyCode == 27){
            ChakmaSystem.getInstance().getGui().getSlideShowGUI().setVisile( false );
            ChakmaSystem.getInstance().getGui().getSlideShowGUI().dispose();
        }