2008-11-13 7 views
3

Я пытаюсь создать ключ слушателя в Java, однако, когда я пытаюсьKeyListener в Java - абстрактный; невозможно создать экземпляр?

KeyListener listener = new KeyListener(); 

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

Спасибо,

Томек

ответ

7

KeyListener является интерфейс - он должен быть реализован на что-то. Таким образом, вы могли бы сделать:

KeyListener listener = new SomeKeyListenerImplementation(); 

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

KeyListener listener = new KeyListener() 
{ 
    public void keyPressed(KeyEvent e) { /* ... */ } 

    public void keyReleased(KeyEvent e) { /* ... */ } 

    public void keyTyped(KeyEvent e) { /* ... */ } 
}; 

Это зависит от того, что вы хотите сделать, в принципе.

1

KeyListener - это интерфейс, который означает, что вы можете написать на нем класс и реализовать его функции. Возможно, это помогает tutorial.

+0

KeyListener - это интерфейс, см. Http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/KeyListener.html – dhiller

+0

Извините за это, я не так знаком с Java и его терминология, спасибо за разъяснения. – schnaader

5

KeyListener - это интерфейс, поэтому вы должны написать класс, который его использует, чтобы использовать его. Как предположил Джон, вы можете создать анонимный класс, который реализует его встроенный, но есть класс KeyAdapter, который является абстрактным классом, реализующим KeyListener, с пустыми методами для каждого метода интерфейса. Если вы подклассифицируете KeyAdapter, вам нужно только переопределить те методы, о которых вы заботитесь, а не каждый метод. Таким образом, если вы только заботитесь о keyPressed, вы можете сделать это

KeyListener listener = new KeyAdapter() 
{ 
    public void keyPressed(KeyEvent e) { /* ... */ } 
}; 

Это может сэкономить вам немного работы.

+0

Прохладный, я не знал этого класса. Это избавит меня от синтаксического беспорядка (пустые методы). –