質問:
マウス イベント オーバーライドによる JLabel のドラッグ アンド ドロップの実装の場合、mousePressed イベント内で定義されている場合、マウスリリースイベントはマウスを放したときにトリガーされません。何か間違っていることがあるでしょうか?"
コード:
<code class="java">Thumbnails[I_Loop].addMouseListener( new MouseAdapter() { public void mouseReleased(MouseEvent me) { System.out.println("here mouse released"); } public void mousePressed(MouseEvent me) { System.out.println("here mouse pressed"); JComponent comp = (JComponent) me.getSource(); TransferHandler handler = comp.getTransferHandler(); handler.exportAsDrag(comp, me, TransferHandler.COPY); });</code>
答え:
@Thomas の解決策
1. JLayeredPane の使用:
この例では、JLayeredPane を使用してコンポーネントをドラッグする方法を示します。このバリエーションは、同じ概念を拡張しています。一方、より最近の例では同様のアプローチが使用されています。
2. MouseMotionListener の使用:
<code class="java">// ... private Point mousePt; private Point dragPt; private Rectangle bounds; public MouseDragTest() { this.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { int dx = e.getX() - mousePt.x; int dy = e.getY() - mousePt.y; dragPt.setLocation(dragPt.x + dx, dragPt.y + dy); super.mouseDragged(e); } }); this.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { bounds = getBounds(); Point p = SwingUtilities.convertPoint(this, e.getPoint(), Bounds.Parent); if (bounds.contains(p)) { dragPt = p; mousePt = e.getPoint(); } } }); // ... }</code>
このコードは、MouseMotionListener の使用を示しています。このより複雑な例では同じ原理が使用されています。
コード:
以上がMousePresss メソッドは、JLabel ドラッグ アンド ドロップでのマウスリリースのトリガーを禁止しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。