ホームページ >Java >&#&チュートリアル >Java の JLabel ドラッグ アンド ドロップで MouseLimited イベントが動作することを確認するにはどうすればよいですか?
ドラッグ アンド ドロップ用の JLabel マウス イベント
JLabel でマウス イベントを使用すると、ドラッグ アンド ドロップ機能が可能になりますが、次のような問題が発生する可能性があります。ドラッグ アンド ドロップが MousePressed イベントで定義されているときに、mouserelease が期待どおりに動作しない問題。
問題を理解するには、mousePressed でドラッグ アンド ドロップ機能を定義すると、転送が開始されることに注意することが重要です。プロセス。これは、mouseリリースを含む後続のイベントが期待どおりに処理されない可能性があることを意味します。
提供されたコード内:
<code class="java"> public void mousePressed(MouseEvent me) { ... handler.exportAsDrag(comp, me, TransferHandler.COPY); }</code>
exportAsDrag を呼び出すと、事実上ドラッグ アンド ドロップ操作が開始されます。他のマウス イベントよりも優先されます。その結果、ドラッグ アンド ドロップ操作の完了を必要とするマウス解放などの後続のイベントはトリガーされません。
代替方法:
2 つの代替アプローチが可能です。この問題を解決します:
MouseMotionListener を使用します:
<code class="java"> addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { // Handle drag operation } });</code>
このアプローチにより、ボタンの押下からドラッグ操作が切り離され、mouserelease が機能できるようになります。
JComponent.setTransferHandler を使用し、マウスでドラッグ アンド ドロップを開始します。:
<code class="java"> setTransferHandler(new TransferHandler("text")); addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { if (e.isControlDown()) { getTransferHandler().exportAsDrag(this, e, TransferHandler.COPY); } } });</code>
ここで、転送ハンドラーは次のとおりです。 JLabel に設定すると、mouseリリース中に Control キーが押された場合にのみドラッグ操作が開始され、mouseリリースが意図したとおりに動作できるようになります。
以上がJava の JLabel ドラッグ アンド ドロップで MouseLimited イベントが動作することを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。