2016-07-12 20 views
1

私はキーかどうかを検出しようとしています。 Ctrlキーを押すと、OSファイルを削除するJava DropTargetDropEventが押されます。 OSファイルブラウザからアプリケーションへのフォーカスの変更のために、私の理解は、焦点のないキー検出が必要な場合があります。一部の人はhard or impossibleでフォーカスがないと答えた人もいれば、solutions and have been acceptedと投稿した人もいます。私は受け入れられた解決策を試しましたが、1つのコメントが言ったように、それは決してキープレスで真実を返すことはありません誰もが考えている?java dnd中にキーが押されたことを検出しました

また、getDropAction of DropTargetDropEventを使用してコントロールキーを検出しようとしました。私がテストしたWindowsとMACでは、コントロールが停止している場合はACTION_COPYを返し、それ以外の場合はACTION_MOVEを返します。残念ながら、コントロールキーが押されていなくても、LinuxではACTION_COPYを返します。ドラッグ元でサポートされているドロップアクションをオーバーライドするような考え方は、コントロールキーが押されていないときにgetDropActionはLinuxではACTION_COPYを返しません。

ご意見やご提案は大歓迎です。

答えて

0

私は数ヶ月間この質問を掲載しましたが、答えはありません。問題は、LinuxのDropTargetDropEvent中に、getDropActionがControlキーが押されていなくてもACTION_COPYを与えることでした。

今日私は、LinuxでControlDownを検出するためのハックを見つけました。解決策は、java.awt.Robotを使用してDragEnterCallbackのShiftキーを押し、DropCallbackまたはDragExitCallbackでキーを解放することです。次に、DropCallbackで、getDropActionは、Controlがダウンしているかどうかに応じて、ACTION_LINKまたはACTION_MOVEのいずれかを与えます。

実際には、ドロップイベント中にコントロールキーを検出するためのOSに依存しないソリューションですが、Windows/MACの方が簡単です。

Shiftキーを検出するためにOSに依存しないメソッドが好きな場合は、同様のメソッドを使用してDragEnterCallbackのControlをロボットで押すことができます。

関連する問題