1

タイムラインを左右にドラッグできるアプリケーションを作成しました。ドラッグすると、これが mouseDragged イベントであることがわかります。コンポーネントの外にマウスカーソルを移動すると、ドラッグが停止しますが、それは望ましくありません。

そのため、そのコンポーネントでmouseDraggedイベントを何らかの形でロックしたいのですが、カーソルをコンポーネントの外に移動すると、mouseDraggedイベントが発生しなくなります。

どうすればそれを解決できますか? 私の同僚は、captureMouse のような機能があると教えてくれました。

4

3 に答える 3

0
JComponent.setAutoScrolls(...);
于 2010-11-08T15:31:31.093 に答える
0

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);
于 2010-11-08T13:35:04.090 に答える
0

ネズミを捕獲するのはあまり良い考えではないと思います。また、あなたが望むものには必要ないと思います。

私の経験では、コンポーネント領域の外にマウスを移動しても、mouseDragged() イベントは正常に動作します。コンポーネント外のマウスの位置に最も近い、コンポーネント内の X および Y 位置を引き続き報告しますが、それは勝ちました。左ボタンを離したかのように、マウスのドラッグを終了しないでください。

アプリケーションの動作が異なる場合、マウスの処理に別のバグがある可能性がありますか?

たとえば、このページの途中でアプレットを試してみてください: 四角形のドラッグを開始し、マウスをアプレット領域の外に移動しても、引き続き機能することがわかります: http://www.dgp.toronto .edu/~mjmcguff/learn/java/04-mouseInput/

(上記のコードの作成者はわかりません。Java アプレット mousedraggedを検索して最初に見つけたコードの 1 つにすぎません。)

于 2010-11-08T14:44:39.377 に答える