問題タブ [keyboardfocusmanager]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 現在のKeyboardFocusManagerへの参照を取得する
Swingアプリケーションで現在のKeyboardFocusManagerへの参照を取得する方法はありますか?
java - KeyEvent.VK_ENTER が再ディスパッチされたときに JTextField が ActionEvent を起動するようにするにはどうすればよいですか?
JFrame 内のフォーカスに関係なく、すべての を 1 つの特定の に再ディスパスするKeyboardFocusManager
独自のカスタムをいじっています。これは、テキスト入力に関する限り魅力的に機能しますが、 a が再ディスパッチされたときに、がそのテキストを a に投稿することも望んでいます。何らかの理由で、これを行うことはできません。テキスト フィールドにカーソルを置いて ENTER を押すと発生する actionListener を設定しましたが、ENTER イベントが.KeyEventDispatcher
KeyEvent
JTextField
JTextField
JTextArea
KeyEvent.VK_ENTER
JTextField
KeyboardFocusManager.redispatchEvent(keyEvent)
また、Enter キーが押された場合に、変更されていない KeyEvent ではなく ActionEvent を再ディスパスしようとしましたが、役に立ちませんでした :( ActionEvent をコンポーネントにディスパスすると、ActionListeners が起動すると思うかもしれませんが、違います。
誰かがこれがなぜなのか説明できますか? そして、それをうまく回避する方法を提案しますか?
SSCCE:
wpf - このLostFocus/LostKeyboardFocusの問題をどのように解決しますか?
わかりました。IsEditingプロパティを持つコントロールがあります。これは、引数のために、通常はテキストブロックであるデフォルトのテンプレートを持っていますが、IsEditingがtrueの場合、インプレース編集のためにテキストボックスにスワップします。これで、コントロールがフォーカスを失ったときに、まだ編集中の場合は、編集モードを終了して、TextBlockテンプレートにスワップバックすることになっています。かなり簡単ですよね?
Windowsエクスプローラーまたはデスクトップでファイルの名前を変更する動作を考えてみてください(これは私が知っているのと同じことです...)それが私たちが望む動作です。
問題は、別のウィンドウ(またはFocusManagerである要素)に切り替えると、コントロールに論理フォーカスがあるためLostFocusが起動せず、機能しないため、LostFocusイベントを使用できないことです。
代わりにLostKeyboardFocusを使用すると、「その他のFocusManager」の問題は解決しますが、新しい問題が発生します。編集中にテキストボックスを右クリックすると、コンテキストメニューが表示されます。これは、コンテキストメニューにキーボードが含まれているためです。フォーカスすると、コントロールはキーボードフォーカスを失い、編集モードを終了してコンテキストメニューを閉じ、ユーザーを混乱させます。
ここで、メニューが開く直前にLostKeyboardFocusを無視するようにフラグを設定し、LostKeyboardFocusイベントでそのフラグを使用して、編集モードを終了するかどうかを決定しようとしましたが、メニューが開いていて、アプリでは、コントロール自体にキーボードフォーカスがなくなったため(メニューにフォーカスがあった)、コントロールが別のLostKeyboardFocusイベントを取得することはなく、編集モードのままになります。(メニューが閉じたときに、フォーカスがあるものを確認するためのチェックを追加し、コントロールでない場合は手動でEditModeからキックアウトする必要がある場合があります。これは有望なようです。)
だから...誰かが私がこの振る舞いをうまくコーディングする方法を知っていますか?
マーク
wpf - DataGrid でキーボード フォーカスを強制する方法は?
旧タイトル: GridView SelectCell + フォーカス/編集の一貫性のないアクション (GridView が 2 回リロードされましたか?)
Expander の Content プロパティに設定された GridView (データにバインド) を開発しています。Expander を開いたときに、3 列目の最初の要素を選択して編集できるようにします (ただし、単にフォーカスするだけでもかまいません)。Expanded にアタッチされたこのアクションにこの機能を追加しようとしたとき、グリッドは最初の項目を選択しませんでした。トラブルシューティングを行ったところ、奇妙なことに、何かが起こっていることに気付きました。Expander は ItemsCollection 内のテンプレートの一部であるため、この ItemsCollection に新しい項目を追加するたびに、画面上に Expander が作成されます (IsExpanded = false に事前設定されています)。Debug.WriteLine を Expander_Expanded イベントに設定し、DataGrid.Loaded イベントにも設定して、イベントがいつ発生したかを知らせます。これらのイベントの両方のコードを次に示します。
DataGrid.Loaded:
Expander.Expanded:
Expander を含む項目を作成して画面に表示すると、DataGrid.Loaded イベントが発生します。エキスパンダーが初めて展開されると、Expander.Expanded イベントと DataGrid.Loaded が発生します。その後は 1 回おきに、Expander.Expanded イベントのみが発生します。
最初に、[0][2] のセルがフォーカスされ、編集モードになります。1回おきに、セルが選択/フォーカスされていません。DataGrid.Loaded イベントにコードがない場合、Expander が初めて開かれたかどうかに関係なく、Cell はフォーカスされず、編集モードにもなりません。Expander.Expanded は実際には何もしていないようですが、選択に関してはそうです。記録として、DataGrid のバインドは完全に機能し、いつ変更を加えても (Expander を初めて開くか、それ以降に開くか)、データは適切に更新されます。誰でもこれを説明できますか?
アップデート:
さらに調査した結果、GridLoaded イベントとの関係は、Keyboard.Focus との関係ほどではありません。DataGrid が初めて読み込まれると、キーボード フォーカスがセル (TextBox の形式) に移動します。ただし、その後は毎回、キーボード フォーカスは Expander 自体を開く ToggleButton に置かれたままです。ただし、両方ともフォーカス可能であっても、Keyboard.Focus(dgCell) または Keyboard.Focus(dg) を設定しようとしても、何もしないようです。DataGrid を開いたときに「Enter」ボタンを押すことで、この仮定を検証することができました。DataGrid にキーボード フォーカスがある場合、Enter キーを押すと次の行に移動します。ToggleButton にフォーカスがある場合、Expander が折りたたまれます。
前述のように、初めて Expander を開いたときは DataGrid にキーボード フォーカスがありますが、2 回目以降は常にフォーカスがボタンになります。助言がありますか?
java - Shiftキーが押されているかどうかを確認します
起動時にShiftキーが押されているかどうかを確認するアプリケーションをプログラミングしています。そのために、私はそれを担当する小さなクラスを作成しました:
ただし、アプリケーションの起動時にShiftキーが既に押されている場合は、これが機能していないようです。次のチェックでは、常にelseの場合が実行されます。
アプリケーションの起動時にShiftキーがすでに押されていた場合に、Shiftキーが押されているかどうかを確認する方法はありますか?WinAPIを使用してこれが可能であることは知っていますが、Java風の方法を使用したいと思います。
前もって感謝します!
wpf - MainWindow は、クリックされたときにフローティング ウィンドウからキーボード フォーカスを盗みます。
WPF にフォーカスする際に問題があります。フォーカスは一般的な問題ですが、私の問題に有効な解決策が見つかりませんでした。状況は次のとおりです。
ドキュメントをフローティングにドラッグできるエディター ソフトウェアがあります (Visual Studio のように)。[保存] ボタンは、すべてのエディター ドキュメントがホストされているペインの上のメイン ウィンドウに表示されます。ここで、1 つのウィンドウをフローティングさせ、もう 1 つのウィンドウをドキュメント ペインにドッキングさせたいと考えています。メイン アプリで [保存] ボタンを押すと、フローティング ウィンドウからフォーカスが奪われ、ドキュメント ペイン内のドキュメントが自動的にフォーカスされます。また、ボタンを直接クリックしてもクリックは何もしません。
フローティング ウィンドウがあるときに、アプリケーションがキーボード フォーカスを受け取らないようにするにはどうすればよいですか? フローティング ウィンドウをアクティブなウィンドウのままにしたいのですが、保存ボタンやメイン アプリケーションのメニューには引き続きアクセスできますか?
どんな助けでも大歓迎です!
java - Swingでフォーカスを同期的にリクエストする方法は?
を呼び出すとcomponent.requestFocusInWindow()
、Swingはフォーカスを同期的に転送するのではなく、非同期FOCUS_GAINED
のイベントをキューに入れます。FOCUS_LOST
回避策として、フォーカス イベントのディスパッチが完了するまでキーボード イベントのディスパッチを遅らせることで、フォーカスの同期切り替えをシミュレートDefaultKeyboardFocusManager
しようとしているようです。しかし、これは正しく機能していないようです。
質問: Swing で同期的にフォーカスを変更する方法はありますか? 本当にDefaultKeyboardFocusManager
同期フォーカスをシミュレートしようとしていますが、深刻なバグがありますか? これを正しく行うフォーカスマネージャーはありますか?
動機:JTextField
いっぱいになると自動的にフォーカスを移す があります。を使用して統合テストを作成java.awt.Robot
する場合、その動作が決定論的であり、タイミングに依存しない必要があります。
あまり回答が得られなかった関連する質問: How to Grab focus now ?
これがデモです。予想される動作: キーを押したままにすると、それぞれJTextField
に 1 つの文字が含まれます。実際の動作: フォーカスが十分に速く変化しないため、複数の文字が取得されます。
更新: この動作は、プログラムによるフォーカスの変更に固有のものではないことに注意してください。3 番目の例では、カスタム フォーカス コールを削除し、代わりにドキュメントの更新遅延を 500 ミリ秒に設定しました。次に、入力しました1Tab2Tab3Tab4Tab5Tab6Tab7Tab8Tab9Tab0。ご覧のとおり、数字は適切にキューに入れられていますが、タブの押下はドロップされています。
c# - プログラムでFocusVisualStyleを表示するには?
試行の後、FocusVisualStyle はキーボード (タブと矢印キー) によってのみアクティブ化されることがわかりました。
コンポーネントが読み込まれた後に FocusVisualStyle が適用されるようにしようとしましたが、それは不可能です。この問題を回避する簡単な方法はありますか?
私はこれを見つけました:
-プログラムでフォーカスをナビゲートするときにフォーカスビジュアルが表示されない
- WPFボタンはFocusVisualStyleを表示することをどのように決定しますか?
- http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/99856840-f8ef-4547-9150-c4c46ec2f3df
しかし、(コンポーネントを上書きすることなく)明確な解決策を示すものはなく、書くことができませんでした。誰か助けてもらえますか?
java - バーコード スキャナーの入力を処理するために外部クラスを使用していますか?
私は基本的な POS アプリケーションを構築しており、メインの POS JFrame がバーコード入力をリッスンする方法を探していました。Cyrusmith によって投稿されたこのコード (わずかに変更された) を見つけました。別のクラスになることを意図しているように見えます。これが、現在私のプロジェクトで使用している方法です。同僚に聞いたのですが、彼も知りません。
ご協力いただきありがとうございます。
java - JFrame をより速く最小化し、スクリーン キャプチャ プログラムがアクティブ化される
ユーザーが任意のキーを押したときに最小化する必要があるプログラムがあります。もう 1 つ必要なことは、プログラムを最小化するために任意のキーを押して、一部のスクリーン キャプチャ ソフトウェアがそれをキャプチャするよりも速く実行することです (彼がキーボードのみでアクティブ化するとします)。第一部やった。すべてのキー (Prt Scr を含む) で最小化されますが、Lightshot を使用すると、まず Lightshot によってフリーズし、閉じるとプログラムが最小化されます。Lighshot (または他のソフトウェア) がアクティブになるよりも早く最小化することはできますか? 繰り返しになりますが、これらのソフトウェアはキーボードを押すことによってのみアクティブになるとします (手動によるアクティブ化を無効にできるため)。
これが私のテストクラスです。