2012-05-15 2 views
0

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

if(keyLifted) 
{ 
    if(Keyboard.isKeyDown(45)) 
    { 
     keyLifted = false; 
     dostuff; 
    } 
    else if(Keyboard.isKeyDown(46)) 
    { 
     keyLifted = false; 
     dostuff(); 
    } 
    else 
    { 
     keyLifted = true; 
    } 
} 

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

Заранее благодарим за любую помощь!

+4

Почему вы не принимаете события нажатия клавиш и keyrelease для обработки изменений статуса клавиатуры? – keltar

+0

@ user1296964 Пожалуйста, сделайте * not * добавьте теги для языков, отличных от того, который вы используете. Тег спама не менее груб, чем спам электронной почты :) –

+0

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

ответ

0

Чтобы захватить события клавиатуры, вы должны использовать KeyListener. Здесь вы идете:

public class KeyListenerExample extends JFrame { 
    public KeyListenerExample() { 
     addKeyListener(new KeyAdapter() { 
      private boolean keyLifted; 

      public void keyReleased(KeyEvent e) { 
       keyLifted = true; 
      } 

      public void keyPressed(KeyEvent e) { 
       keyLifted = false; 
       switch (e.getKeyChar()) { 
        case 45: 
         doStuff(); 
         break; 

        case 46: 
         doStuff(); 
         break; 
       } 
      } 
     }); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    private void doStuff() { 
     System.out.println("stuff"); 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     new KeyListenerExample(); 
    } 
} 

Я просто держал keyLifted, потому что в вашем примере. Но я думаю, что для обычных клавиатурных вещей вам это не нужно.

+0

Спасибо. Это было действительно то, что мне нужно. – Htuy

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