KeyListener не будет работать с dispose (); - PullRequest
0 голосов
/ 27 декабря 2011

Я пытаюсь закрыть окно, когда пользователь нажимает клавишу выхода и открывает новое окно. По какой-то причине, когда я добавляю 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();
    }
}

Ответы [ 2 ]

3 голосов
/ 27 декабря 2011

Вы НЕ должны использовать KeyListener для этого.

Вместо этого вы должны использовать привязки клавиш и добавить привязку в корневую панель. См. Привязки клавиш для получения дополнительной информации. Поскольку привязки добавляются в корневую панель, это следует делать при создании рамки, чтобы иметь доступ к рамке.

0 голосов
/ 27 декабря 2011

Почему он знает, что делать, когда вы звоните утилизировать? Что следует утилизировать?

Вы должны сделать фрейм переменной класса, а затем вызвать dispose, как frame.dispose ();

...