ちょっと、そこ!スイングサプライヤーとして、私はあらゆる種類のスイングを扱ってきました。庭の屋内スイングにタイヤの裏庭のスイングセットそして公園のための木製のスイング。しかし、今日、私は少し違うこと、つまりスイングのキーボードイベントを処理する方法についてお話したいです。
Swingは、あらゆる種類のインタラクティブアプリケーションを作成できる非常にクールなJava GUIツールキットです。キーボードイベントの処理は、これらのアプリをユーザーにするための重要な部分です - フレンドリー。ユーザーは、キーボードを使用してアプリをナビゲートし、アクションをトリガーし、あらゆる種類のことを行うことができると期待しています。それでは、それを実現する方法を掘り下げましょう。
スイングでキーボードイベントを理解する
まず、キーボードイベントとは何ですか?スイングでは、ユーザーがキーボードのキーを押したりリリースしたりすると、キーボードイベントが生成されます。キーボードイベントには3つの主要なタイプがあります。key_pressed、key_released、 そしてkey_typed。
key_pressed:このイベントは、キーが押されたときに解雇されます。矢印キー、機能キーなど、押された物理キーに関する情報を提供します。key_released:名前が示すように、このイベントはキーがリリースされたときに解雇されます。ユーザーがキーを手放した後にアクションを実行したい場合に役立ちます。key_typed:このイベントは、入力されたキャラクターに関連しています。キーボードのレイアウトや修飾子(ShiftやCaps Lockなど)などが考慮され、入力された実際の文字を決定します。
キーリスナーを追加します
スイングのキーボードイベントを処理するには、キーリストコンポーネントへ。 aキーリスト私たちが話した3種類のキーボードイベントに対応する3つの方法を持つインターフェイスです。キープレス、KeyReleased、 そしてキータイプ。
これがあなたがどのように追加できるかの簡単な例ですキーリストにjtextfield:
javax.swing。*; java.awt.event.keyadapterをインポートします。 java.awt.event.keyeventをインポートします。 public class keyeventexample {public static void main(string [] args){jframe frame = new jframe( "key event example"); jtextfield textfield = new jtextfield(20); textfield.addkeylistener(new keyadapter(){@override public void keypressed(keyevent e){system.out.println( "key pressed:" + keyevent.getkeytext(e.getkeycode());} @override public void keyReled(keyevent e){system.out.Out.Out.Println( keyevent.getKeyText(e.getKeycode()); frame.add(textfield); frame.setDefaultCloseoperation(jframe.exit_on_close); frame.pack(); frame.setVisible(true); }}
この例では、シンプルを作成しますjframeでjtextfield。次に、Aを追加しますkeyadapter(これを実装する便利なクラスですキーリストインターフェイスとメソッドの空の実装を提供する)にjtextfield。内側keyadapter、私たちはオーバーライドしますキープレス、KeyReleased、 そしてキータイプキーボードイベントに関する情報を印刷する方法。


キーバインディングを使用します
その間キーリスト単純なケースでは正常に動作しますが、いくつかの制限があります。たとえば、独自のデフォルトのキーボード動作を持つコンポーネントではうまく機能しません。jbuttonまたは名前。それがキーバインディングが入ってくるところです。
スイングのキーバインディングにより、キーストロークをアクションに関連付けることができます。キーストロークは、単一のキーまたはキーの組み合わせ(CTRL + Sなど)にすることができます。アクションは、を実装するオブジェクトですアクションインターフェイスとパフォーマンスキーストロークがトリガーされたときに呼び出される方法。
キーバインディングを使用してEnterキーを処理する方法の例は次のとおりです。jtextfield:
javax.swing。*; java.awt.event.actioneventをインポートします。 java.awt.event.keyeventをインポートします。 public class keybindingexample {public static void main(string [] args){jframe frame = new jframe( "key binding example"); jtextfield textfield = new jtextfield(20); action enteraction = new Abstractaction(){@Override public void actionPerformed(actionEvent e){system.out.println( "enter keypressed。text:" + textfield.getText()); }}; inputMap inputmap = textfield.getInputMap(jcomponent.when_focused); ActionMap ActionMap = textfield.getActionMap();キーストロークEnterKeyStroke = KeyStroke.GetKeyStroke(KeyEvent.VK_ENTER、0); inputmap.put(enterkeystroke、 "enteraction"); ActionMap.put( "Enteraction"、Enteraction); frame.add(textfield); frame.setDefaultCloseoperation(jframe.exit_on_close); frame.pack(); frame.setVisible(true); }}
この例では、Aを作成します抽象化それはのテキストを印刷しますjtextfieldEnterキーが押されたとき。次に、の入力マップとアクションマップを取得しますjtextfield。を作成しますキーストロークEnterキーの場合、入力マップに入れて、文字列「Enteraction」に関連付けます。最後に、キーと同じ文字列を持つアクションマップにアクションを配置します。
モディファイアキーの処理
Shift、Ctrl、Altなどのモディファイアキーは、他のキーと組み合わせて特別なアクションを実行するためによく使用されます。スイングでは、モディファイアキーをに含めることで処理できますキーストロークキーバインディングを使用する場合。
たとえば、ctrl + sを処理するには:
keystroke savekeystroke = keystroke.getkeystroke(keyevent.vk_s、keyevent.ctrl_down_mask);
その後、これを関連付けることができますキーストローク前の例のようにアクションがあります。
フォーカスおよびキーボードイベント
キーボードイベントは、焦点を当てたコンポーネントによってのみ受信されることに注意することが重要です。したがって、特定のコンポーネントにキーボードイベントを受信する必要がある場合は、焦点があることを確認する必要があります。を使用してプログラムでフォーカスを設定できますrequestfocusinwindow方法。
textfield.requestfocusinwindow();
テストとデバッグ
キーボードイベントの処理に取り組んでいる場合、コードを徹底的にテストすることをお勧めします。使用できますSystem.out.println例のように、キーボードイベントに関する情報を印刷するステートメント。また、デバッガーを使用してコードをステップインして、何が起こっているのかを確認することもできます。
結論
スイングでキーボードイベントを処理することは、インタラクティブなJavaアプリケーションを作成する上で重要な部分です。使用しているかどうかキーリストより複雑なシナリオの単純なケースまたはキーバインディングの場合、キーボードイベントを処理する方法を理解することで、アプリがよりユーザーになります - フレンドリー。
あなたが高い市場にいるなら - 質の高いスイング、庭の屋内スイング、タイヤの裏庭のスイングセット、 または公園のための木製のスイング、私たちはあなたをカバーしています。スイングの購入に興味がある場合は、調達の議論に手を差し伸べることをheしないでください。私たちはいつでもあなたのニーズについて話し、あなたのための完璧なスイングソリューションを見つける準備ができています。
参照
- ジョシュア・ブロッホによる「効果的なJava」
- Eckstein、Hanson、およびRobertsによる「Java Swing」
