Java Swing の MouseMotionListener: ネストされたコンポーネント内のイベントの処理
Swing は、マウスの動きに関連するイベントを処理するための MouseMotionListener インターフェイスを提供します。このインターフェイスを実装すると、コンポーネントはマウスのドラッグや移動イベントに応答できるようになります。ただし、他のコンポーネント内にネストされたコンポーネントを操作する場合、イベントの伝播に問題が生じる可能性があります。
マウスのドラッグに応答する必要があるカスタム JScrollPane があるとしますが、その子コンポーネントがこれらのイベントをブロックしているとします。残念ながら、イベントを手動で伝播するには時間がかかる場合があります。幸いなことに、この問題には別の解決策があります。
スクロール アクションによるカスタム イベント処理
1 つのアプローチは、JScrollPane の既存のキーバインド アクションを利用することです。カスタム アクションを実装すると、マウスがビューポートの特定の領域に入ったときに目的のアクションをトリガーできます。このアプローチにより、ネストされたコンポーネントがある場合でも、マウス モーション イベントが適切に処理されます。
コード例:
<code class="java">import java.awt.event.ActionEvent; import java.awt.event.ActionListener; class ScrollAction implements ActionListener { private JScrollPane scrollPane; private String action; private Timer timer; public ScrollAction(JScrollPane scrollPane, String action) { this.scrollPane = scrollPane; this.action = action; timer = new Timer(100, this); } @Override public void actionPerformed(ActionEvent e) { scrollPane.getActionMap().get(action).actionPerformed(e); } public void start() { timer.start(); } public void stop() { timer.stop(); } }</code>
これらのカスタム アクションをビューポートに追加することで、 JScrollPane を使用すると、マウスがビューポートの特定の領域に移動したときの望ましい動作を定義でき、コンポーネントがビューポートを隠している場合でもイベント処理をシミュレートできます。
以上がネストされた Java Swing コンポーネントで MouseMotion イベントを処理する方法: カスタム スクロール アクションを使用した解決策?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。