KeyListener не будет работать с dispose();

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

person Community    schedule 26.12.2011    source источник
comment
About не будет иметь метода удаления, поскольку он не наследуется от класса Window. То есть вам придется вызывать dispose для вашей переменной фрейма.   -  person Dunes    schedule 27.12.2011


Ответы (2)


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

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

person camickr    schedule 26.12.2011

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

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

person Breina    schedule 26.12.2011