Закрыть окно при нажатии определенной клавиши - PullRequest
4 голосов
/ 09 августа 2011

Я только начал использовать Java, и я не очень хорош, так что, если бы вы могли мне помочь, это было бы здорово!Я делаю приложение Swing и хочу закрыть его только при нажатии определенной клавиши.Есть ли способ сделать это?

Ответы [ 5 ]

9 голосов
/ 09 августа 2011

В отличие от других ответов X здесь, я рекомендую вам не использовать KeyListener, а использовать привязки клавиш.Это абстракция более высокого уровня, которая помогает избежать проблем с фокусировкой, которые возникают при использовании KeyListeners.Вы можете узнать больше о привязках клавиш в руководствах по Swing здесь: Как использовать привязки клавиш

2 голосов
/ 09 августа 2011

Если вы хотите, чтобы программа реагировала сразу после нажатия клавиши, вы используете события клавиатуры и интерфейс KeyListener. В отличие от интерфейсов ActionListener или ItemListener, интерфейс KeyListener должен реализовывать три метода:

  • void keyPressed(KeyEvent) - метод, называемый моментом нажатия клавиши

  • void keyReleased(KeyEvent) - метод, называемый моментом отпускания клавиши

  • void keyTyped(KeyEvent) - Метод, вызываемый после нажатия и отпускания клавиши

Хотя все эти методы должны присутствовать в вашем коде, вам не нужно иметь какие-либо операторы внутри них.

Вызовите метод getKeyChar(), чтобы узнать, какая клавиша была нажата. Как следует из метода, это возвращается как char значение. Однако этот метод работает только для буквенных клавиш, цифровых клавиш и знаков пунктуации.

Для мониторинга любой клавиши на клавиатуре используйте метод getKeyCode(). Это возвращается как int значение. Вы можете выполнить это с помощью метода getKeyText() со значением int в качестве аргумента. Это вернет фактическое имя ключа (то есть Home, F2 и т. Д.).

Вы хотите, чтобы окно закрывалось только при нажатии определенной клавиши. Ниже приведен пример того, как вы будете это делать:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class example extends JFrame implements KeyListener {
    JLabel closeLabel = new JLabel("Press the \"x\" key to close me!");

    public example() {
        super("Close me!");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        closeLabel.addKeyListener(this);
        closeLabel.setFocusable(true);
        add(closeLabel);
        pack();
        setVisible(true);
    }

    public void keyTyped(KeyEvent input) {
        char key = input.getKeyChar();
        if (key == 'x') System.exit(0);
    }

    public void keyPressed(KeyEvent txt) {
        //do nothing
    }

    public void keyReleased(KeyEvent txt) {
        //do nothing
    }
}
1 голос
/ 09 августа 2011

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

0 голосов
/ 09 августа 2011

Вы должны зарегистрировать обработчик для обработки нажатий клавиш на компоненте колебания, на который вы хотите отреагировать.На обработчике закройте окно.

Это шаблон наблюдателя http://www.javaworld.com/javaworld/javaqa/2001-05/04-qa-0525-observer.html

0 голосов
/ 09 августа 2011

Добавьте KeyListener и проверьте, была ли нажата ваша клавиша. Вот учебник о том, как это сделать. http://download.oracle.com/javase/tutorial/uiswing/events/keylistener.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...