修飾キー設定用のJButton拡張クラス・キーリスナを設計しよう

Posted on

タイトルのとおりです.私が色々やった結果を乗っけてます.

ソースは汚いのであまり乗せたくない・・・.

キーリスナに関して

KeyEvent#getModifiers()やKeyEvent#getKeyCode()を使って判断していきます.

何のキーを押しているかどうかを判断するには,KeyTypedかKeyReleasedを使うしかありません.

また,KeyReleasedを使うと,ユーザが

  • 修飾キーを押す
  • 別の普通のキーを押す
  • 修飾キーを離す
  • 別の普通のキーを離す

という順番で入力した場合,修飾キーしか判断されません.

(離す順番が逆なら大丈夫.)

というわけでKeyPressedを使って判断します.

しかし,KeyPressedを使ってもユーザが修飾キーを押せば修飾キーのみを,普通のキーを押せば普通のキーしか判断されません.

というわけで修飾キーの時は無視します.

最終的にKeyPressedのソースはこんな感じ.

public void keyPressed(KeyEvent e){
if(e.getKeyCode() == e.VK_SHIFT ||
e.getKeyCode() == e.VK_CONTROL ||
e.getKeyCode() == e.VK_META ||
e.getKeyCode() == e.VK_ALT){}else{//修飾キーの場合は無反応
/*キーの検出*/
/*ボタンテキストにキーのテキストを設定*/
/*キーの設定*/
/*リスナ(自分)の削除*/
}
}

KeyEvent#getSource()を使うとソースが省略できるかも.


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください