【问题标题】:KeyListener will not work with dispose();KeyListener 不能与 dispose() 一起使用;
【发布时间】:2011-12-27 05:54:51
【问题描述】:

当用户按下退出键并打开一个新窗口时,我试图关闭一个窗口。出于某种原因,当我添加 dispose();对关键监听器来说,它不起作用。

知道如何解决这个问题吗?

提前致谢!

代码如下:

public class About extends JPanel implements KeyListener{

Font menu = new Font("SansSerif", Font.BOLD, 12);
Font title = new Font("SansSerif", Font.BOLD, 14);
Font version = new Font("Monospaced", Font.ITALIC, 12);
boolean falling = false;

public About() {

    JFrame frame = new JFrame("Tiny Runner");
    frame.add(this);
    frame.setBounds(0, 0, 800, 600);
    frame.addKeyListener(this);
    frame.setFocusable(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.setVisible(true);
    }
public void keyPressed(KeyEvent keyEvent) {
    if (keyEvent.getKeyCode() == KeyEvent.VK_ESCAPE) {
            new MainMenu();
            dispose();
    }
}

【问题讨论】:

  • About 没有 dispose 方法,因为它不是从 Window 类继承的。也就是说,您必须在框架变量上调用 dispose。

标签: java swing keylistener


【解决方案1】:

您不应该为此使用 KeyListener。

相反,您应该使用键绑定,并且应该将绑定添加到根窗格。请参阅Key Bindings 了解更多信息。由于绑定已添加到根窗格,因此应在创建框架时完成此操作,以便您可以访问框架。

【讨论】:

    【解决方案2】:

    为什么当你调用 dispose 时它会知道要做什么?应该处理什么?

    你应该把frame设为类变量,然后像frame.dispose()一样调用dispose;

    【讨论】:

      猜你喜欢
      • 2013-11-07
      • 2021-12-15
      • 2016-01-06
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 2017-04-14
      • 2016-09-16
      相关资源
      最近更新 更多