マウス出口Javaのロックイベント
-
29-09-2019 - |
質問
タイムラインを左右にドラッグできるアプリケーションを書きました。私がドラッグするとき、私はこれがムーセッジされたイベントであることを知っています。マウスカーソルをコンポーネントの外側に移動するので、ドラッグが停止しますが、それは欲しくありません。
そのため、そのコンポーネントでマウスドラグイベントを何らかの形でロックしたいのですが、カーソルをコンポーネントの外側に移動した場合、MousedRaggedイベントはもうありません。
どうすればそれを解決できますか?私の同僚は、CaptureMouseのような機能が存在することを教えてくれます。
解決
マウスをキャプチャするのはそれほど良い考えではないと思います。また、あなたが望むものには必要だとは思いません。
私の経験では、MousedRagged()イベントは、マウスをコンポーネント領域の外側に移動する場合でも正常に機能します。コンポーネントの外側のマウスの位置に最も近いコンポーネント内のXおよびY位置を引き続き報告しますが、勝ちました。 '左ボタンをリリースしたかのように、マウスのドラッグを終了します。
アプリケーションの動作が異なる場合、マウスの取り扱いに異なるバグがあるかもしれません。
たとえば、このページの途中でアプレットを試してみてください。長方形のドラッグを開始し、マウスをアプレットエリアの外側に移動できることがわかります。http://www.dgp.toronto.edu/~mjmcguff/learn/java/04-mouseinput/
(上記のコードの著者を知りません。それは私が見つけた最初の1つにすぎません JavaアプレットMousedRagged.)
他のヒント
「タイムライン」のどの部分が、MousedRagged()イベントを受信する実際のコンポーネントですか?通常、このイベントを受信すると、コンポーネントをドラッグアクションに一致させるように移動します。そのため、コンポーネントは常にマウスの下にあり、常に手放すまでMousedRagged()イベントを受信する必要があります。イベントを処理するときにこのコンポーネントを移動していますか?スライダーとして使用される小さなボタンのような長方形は、使用する優れたコンポーネントを作成します。
(タイムライン全体をコンポーネントとして扱おうとしているため、それを一致させるように動かしていない場合、ユーザーが外側にマウスをドラッグした場合はどうなりたいですか?)
Windows(および他の人)はマウスをキャプチャするサポートをサポートしていますが、Javaは表示されません。カスタムイベントキューを提供できる場合があります。
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener()
{
public void eventDispatched(AWTEvent e)
{
// Look for mouse messages and handle them...
}
}
, AWTEvent.MOUSE_MOTION_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK);
JComponent.setAutoScrolls(...);