2012-12-20 3 views
0

Я понимаю, как использовать модификаторы с ключевыми привязками, такими как CTRL_DOWN_MASK + some key, но я хочу, чтобы иметь возможность привязывать определенное действие к тому, когда Control, некоторая буква (т.е. «W»,), и стрелка вверх все нажата. Что-то вроде CTRL_DOWN_MASK + some key + Up Arrow.Привязать действие к комбинации из 3 или более ключей с помощью привязок клавиш

Я бы использовал это, чтобы изменить громкость определенного звукового клипа. Поэтому, когда у меня есть CTRL_DOWN_MASK + W + Up Arrow, все нажатые громкость увеличится для звукового клипа, назначенного W JButton, и если у меня есть CTRL_DOWN_MASK + W + Down Arrow, то громкость будет уменьшаться для упомянутого звукового клипа.

public void bindKey(JPanel base) 
    { 

     base.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(key, InputEvent.CTRL_DOWN_MASK),"Volume"+key); 
     base.getActionMap().put("Volume"+key, new AbstractAction(){ 
      public void actionPerformed(ActionEvent e) 
      { 
       //if(Up Arrow is being pressed.) 
       setGain(currentGain() + 1.0f); 

       //if(Down Arrow is being pressed.) 
       setGain(currentGain() - 1.0f); 
      } 
     }); 
    } 
+0

у вас есть [делать логику самостоятельно] (http://stackoverflow.com/a/13440608/203657) – kleopatra

+0

Спасибо @kleopatra Я проверю это. – Alex

+0

@ kleopatra С вашим ответом в этом сообщении, как бы вы реализовали это в существующей карте действий. Я не понимаю, что вы делаете с расширением AbstractAction, который вы создаете, и тем, как вы назначаете действие для сопоставления клавиш A + S + D. – Alex

ответ

3

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

Ваш другой вариант - сопоставить привязки клавиш на клавишах ctrl + w и ctrl + up. Затем, когда они оба активны, сделайте свое действие. Вам нужно будет установить флаги и иметь два сопоставления - один для нажатых и один для выпуска. Вы можете увидеть Keystroke class для получения дополнительной информации о настройке ключей для сопоставления.

+0

Ну, у меня есть 2 руки, поэтому можно нажать Crtl + W и затем вверх или вниз стрелки другой рукой. Но спасибо за ваше предложение, я попробую добавить оба эти сопоставления и посмотреть, что я могу сделать. – Alex

+0

Когда вы говорите, что установлены флаги, что вы подразумеваете под этим? – Alex

+0

@Alex Да, вы абсолютно правы, что это возможно. Обычно это не так удобно (что обычно является целью привязок) - возможно, поэтому он не построен. Когда я говорю «флаги», я имею в виду логические переменные, которые говорят вам, произошло ли событие. Таким образом, у вас есть два события для ctrl + w (один для нажатия и один для отпускания), задает логическую переменную, указывающую, что она нажата. У вверх и вниз будет свое собственное событие, которое сначала проверяет флаг - если флаг установлен (true), он продолжает регулировать громкость. В противном случае он ничего не делает. –