タイトルのとおりです.私が色々やった結果を乗っけてます.
ソースは汚いのであまり乗せたくない・・・.
キーリスナに関して
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()を使うとソースが省略できるかも.