2015-06-18 3 views
0

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

Моя логика действий слушателя в том, что:

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

if(b1==e.getSource()){ 

    if(b2.getIcon()==null){ 
     b2.setIcon(b1.getIcon()); 
     b1.setIcon(null); 
    } 
    else if(b5.getIcon()==null){ 
     b5.setIcon(b1.getIcon()); 

     b1.setIcon(null); 
    } 
} 
+1

[Как написать «KeyListener»] (https://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html) на веб-сайте Oracle. –

+0

@Constant: пожалуйста, удалите свой комментарий выше, поскольку это неточно. Это не имеет ничего общего с его проблемой, и '==' здесь просто отлично, так как он действительно после ссылочного равенства. –

+1

@ симпатичный программист, если вам нужна помощь в выполнении ключевых ответов на нажатия в вашей программе, а затем покажите нам свою попытку сделать именно это, предпочтительно [Минимальная, полная и проверенная программа примеров] (http://stackoverflow.com/help/ mcve). В противном случае вы, по сути, просите нас создать для вас новый учебник, когда многие уже существуют. Вероятно, вам гораздо лучше использовать привязки клавиш, так как ответы на многие подобные вопросы на этом сайте расскажут вам. –

ответ

1

Вы говорите нам, что вы внедрили KeyListener, но он не работает. Без кода, все, что мы можем сделать, это предположение, так вот мое:

  • KeyListeners требуют внимания к работе, и поэтому, если ваш GUI имеет какие-либо компоненты, которые крадут фокус, таких как JButtons, все JTextComponents, такие как JTextArea или JTextField , JComboBoxes, JLists, ... тогда ваш KeyListener не будет работать.
  • Один kludge должен заставить компонент с KeyListener иметь фокус и жадно удерживать фокус. Это не рекомендуется, так как это заставит вашу программу вести себя ненормально, поскольку большинство пользователей ожидают, что кнопки будут иметь и удерживать фокус при нажатии, а текстовые компоненты не будут работать, если им не разрешено фокус.
  • Опять же, часто лучшим решением является использование ключевых привязок, поскольку они могут работать без необходимости фокусировки и являются более чистым способом захвата нажатий клавиш. Посмотрите на Key Bindings Tutorial, а затем посмотрите на мой пример кода для использования ключевых привязок here и here.

Опять же для лучшей и более конкретной помощи, то пожалуйста скажите нам больше деталей и показать нам свой уместный код, предпочтительно в качестве minimal example program or MCVE.

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