この問題の解決方法を教えてください。Java JPanelマウスリスナーがコンポーネント上で動作しない
JPanelにマウスリスナーを追加しましたが、そのパネルにはJPanelの全領域をカバーするボタンがいっぱいです。
例(擬似)コード:
Create JPanel
Set to GridLayout
Add 25 buttons (5x5 grid)
Add MouseListener to JPanel
のMouseListener /のMouseMotionListener:
onMouseMove { print out X,Y co-ords of mouse }
私は右のJPanel容器の縁に到達するまでための共ordsは、プリントアウトされることはありませんボタンが残りの部分をブロックしています。
各コンポーネントにリスナーを追加することなく、パネルのすべてのコンポーネントに対してマウスリスナーを機能させるにはどうすればよいですか?または、各コンポーネントにリスナーを追加するはずですか?
情報を追加: 私は(パネルをスワイプすると発生するアクションを起こす)タッチスクリーンシステム用のタッチジェスチャーを追加しようとしています。 私はジェスチャーを自分自身で認識することについてかなり自信がありますが、実際には、各コンポーネントにリスナーのコピーを追加するよりも「より良い」方法を探していました(コンポーネントが変更されているため、私は...代わりのglassPaneにそれを追加しようとするつもりです
(瞬間のgetRootPane()には、私のNullPointerExceptionを与える)
EDIT: 私は今、私は(のgetRootPaneにしようとしていることを知っています)JPanelからルートコンテナではないので、なぜ私はnull
を得ているthats。私はメインのJFrameでこれを行う必要があります。
EDIT2:だから、それを
myGlassPane.setVisible(true);
: わかりましたので、私は私がこれをしなかったので、(メインのJFrameに窓ガラスを追加しました)、最初に私は問題を抱えていたことをやりましたそれは動作していないようだった。しかし、私は私がしなければならなかったすべてはそれ透明
myGlassPane.setOpaque(false);
はだから今、私はボタンの上にプリントアウトするX、Yの共同ordsを取得し、すべてのものよ作るためにfalseに不透明なフラグを設定したことをやった後、しかし、それらの上にパネルがあるため、ボタンは機能しません。
マウスをインターセプトしてマウスイベントを下位のすべてのコンポーネントにディスパッチさせる必要がある場合があります。 –
ボタンに 'MouseListener'を使わないでください! 'ActionListener'はマウスとキーボード入力の両方に応答します。 –
こんにちは。 'myPanel.getRootPane()...を試してみると' NullPointerException'を回避できません私がglassPaneに乗ろうとしているときに。 – Ozzy