2016-02-10 2 views
0

Мне было интересно, можно ли создать даже в java, без постоянного опроса состояния значения, которое я наблюдаю.Как создать собственное событие в java

Например, возможно ли создать событие, которое происходит, когда пользователь нажимает пробел, не проверяя, нажата ли пробельная полоска, чтобы функция вызывалась, только если пользователь нажимает пробел бар?

+0

, что вы имеете в виду под «постоянно опрашивает состояние значения Я нахожусь наблюдения "? –

+0

Да, вам нужно добавить keylistener в свой родительский компонент, который направит уже существующий keypressevent на ваш компонент. https://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html – HopefullyHelpful

+0

принципы описаны в https://en.wikipedia.org/wiki/Observer_pattern шаблоне наблюдателя .... –

ответ

0

Использование шаблона Observer, Java уже реализовано. Проверьте документ Java или here.

0

Логическое флаг

boolean flag = false; 

Вот JTextField.

JTextField tf = new JTextField(); 

И вы добавляете к нему прослушиватель клавиш, чтобы прослушивать ключевые события на нем.

tf.addKeyListener(kl); 

kl - объект KeyListener, который вы создали ранее.

KeyListener kl = new KeyListener(){ 
    ... 
    onKeyPressed(KeyEvent e) { 
     if(e.getKeyCode() == KeyEvent.VK_SPACE) { 
     System.out.println("space hit"); 
     flag = !flag;  //I think this is what you want 
     } 
    } 
    ... 
}; 

Это не рабочий код. Просто пример, который позволит вам лучше понять Слушателей.

0

, поскольку по умолчанию ОС обеспечивают только ключ-управляемую событиями поддержку, которую вы должны написать свой собственный драйвер клавиатуры, где вы можете предоставить методы опрашивать состояние ключа ...

(помните, что у вас нет аппаратных штифтов на клавиатуре для каждой клавиши, которая может быть проверена, как вы привыкли делать на микроконтроллере, сама клавиатура обрабатывает состояния и отправляет события в ОС, которые на своей стороне вызывают «прерывания». Эти перехваты обрабатываются драйвером, а именно драйвер клавиатуры)

Writing a keyboard device driver

вы можете более easiliy написать свой собственный класс клавиатуры, который отображает все keyevents и могут быть опрошены

class KeyboardState extends KeyAdapter{ 

    boolean[] keyState = new boolean[256]; 

    @Override 
    public void keyPressed (KeyEvent ke){ 
     keyState[ke.keyCode] = true; 
    } 

    @Override 
    public void keyReleased(KeyEvent ke){ 
     keyState[ke.keyCode] = false; 
    } 

    public boolean isKeyDown(int keyCode){ 
     return keyState[keyCode]; 
    } 
} 

этот код был написан непосредственно в SO поэтому не проверка ... Не забудьте добавить вам клавиатуру к в соответствии кадр ...

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

+0

не будет 'keyEvent.getKeyCode()'? Я так думаю, пожалуйста, исправьте это в своем коде^_^ха-ха, получайте удовольствие, счастливое кодирование! –

Смежные вопросы