Ниже приведен мой тестовый код для базовой Boxlayout с JLayeredPane, показывающий два изображения, которые частично перекрывают друг друга.У одного рисунка есть mouseListener, но этот слушатель также работает при нажатии на невидимую часть рисунка.Есть ли способ избежать этого?
package swingPackage;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class LayeredPaneMouseListener extends JPanel {
public static JPanel[] JWA = new JPanel[2];
public static JLayeredPane layeredPane;
public static LayeredPaneMouseListener s0 = new LayeredPaneMouseListener();
public JComponent LayeredPaneDemo() {
JComponent jC = new LayeredPaneMouseListener();
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
layeredPane = new JLayeredPane();
layeredPane.setPreferredSize(new Dimension(500, 810));
layeredPane.setBorder(BorderFactory.createTitledBorder("test"));
for (int w = 0; w < 2; w++) {
layeredPane.add(JWA[w], new Integer(w));
}
jC.add(layeredPane);
return jC;
}
public JPanel createPanel(int w) {
JPanel p = new JPanel();
String pic = path + name + ".jpg";
ImageIcon imgIcon = new ImageIcon(GridBagLayoutDemo1.class.getResource(pic));
JLabel label = new JLabel(imgIcon);
if (w == 0) {
MyM0 mM0 = new MyM0();
label.addMouseListener(mM0);
}
p.add(label);
return p;
}
public static void main(String[] args) {
for (int w = 0; w < 2; w++) {
JWA[w] = new JPanel();
JPanel panel = s0.createPanel(w);
JWA[w].add(panel);
int x = 50 + 3 + w * 26;
int y = 500;
JWA[w].setBounds(x, y, 139, 436);
}
JFrame frame = new JFrame("test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComponent newContentPane = s0.LayeredPaneDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
private class MyM0 extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
System.out.println("clicked");
}
}
}
Вкратце: как запретить MouseListener работать с невидимой частью изображения в JLayeredPane?