2016-03-23 3 views
0

Я пытаюсь использовать KeyListener в своей программе. Я добавил этот класс к моему основному классу:Почему я не могу добавить прослушиватель клавиш?

class CustomKeyListener implements KeyListener{ 
    @Override 
    public void keyTyped(KeyEvent k) {} 
    @Override 
    public void keyPressed(KeyEvent k) {} 
    @Override 
    public void keyReleased(KeyEvent k) {}  
} 

Однако я не могу добавить метод addKeyListener(new CustomKeyListener()) где-нибудь в моем главном классе. Что мне не хватает?

Основываясь на моих предыдущих question Я понимаю, что он будет работать только с графическим интерфейсом. Должен ли я просто добавить какую-то произвольную форму, и она будет работать?

Может ли кто-нибудь пролить свет на эту проблему?

+1

Что вы пытаетесь добавить к KeyListener? – apicellaj

+1

«некоторая форма арбитража» мне не подходит. Если вы хотите идти по этому пути, вам нужно создать графический интерфейс пользователя, который вы хотите видеть и использовать. –

+0

@ OleV.V. Я единственный пользователь. все, что я хочу, это добавить этот keylistener, чтобы я мог поймать любую операцию нажатия клавиш, чтобы остановить какой-то цикл. это оно. –

ответ

0

Ваш основной класс реализует/расширяет класс, который фактически поддерживает метод, который вы пытаетесь использовать?

Определенный контекст относительно того, что ваш основной класс и чего вы хотите достичь. Возможно, вам нужен сканер? Если это так, взгляните сюда, чтобы узнать, как его использовать. http://www.tutorialspoint.com/java/util/java_util_scanner.htm

Кроме того, это могло бы, вероятно, поможет также: Java using scanner enter key pressed

+0

Я уже пробовал метод «Сканер», не работал для меня. должен ли я добавить к моему основному классу «хорошо использовать KeyListener»? –

0

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

class MyClass extends JComponent 

Обратите внимание, что наследование не должны быть прямыми; если ваш класс получен из (например) JFrame, он косвенно наследует метод addKeyListener, потому что сам JFrame является производным от Component.

Также, как указано в ответах на вопрос this question, ваш класс должен быть сфокусирован для работы Key Listener.

Update

Вы писали в комментариях, что вы пытаетесь использовать

this.addKeyListener(new CustomKeyListener()); 

и получил ошибку

не может использовать это в статическом контексте

Это происходит потому, что вы вызвали вызов из статического метода (метод main в этом случае).
this относится к текущему экземпляру класса. В статическом методе нет экземпляра - это практически определение статического метода.

Что вы должны сделать, это создать экземпляр:

MyClass newInstance = new MyClass(); 

Теперь вы можете добавить ключ слушателя к этому экземпляру:

newInstance.addKeyListener(new CustomKeyListener()); 

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

В официальных учебных пособиях по Java есть еще explanation на эту тему.

+0

почти. 'Нет доступного экземпляра типа MyClass. Должен квалифицировать выделение с помощью экземпляра типа MyClass (например, x.new A(), где x является экземпляром MyClass). Сделал все, что вы сказали, теперь я получаю эту ошибку.MyClass - мой основной класс. –

+0

На данный момент, вероятно, проще всего иметь 'CustomKeyListener' вне основного класса. Когда вы немного опытнее, узнайте о внутренних классах. Или, как следует из сообщения об ошибке: 'addKeyListener (MyClass.new CustomKeyListener())'. –

+1

ОК спасибо. плохо продолжайте работать над этим. –