Как запретить MouseListener работать с невидимой частью картинки в JLayeredPane - PullRequest
0 голосов
/ 23 декабря 2018

Ниже приведен мой тестовый код для базовой 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?

...