Java 在JPanel上单击鼠标时未检测到JLabel

Java 在JPanel上单击鼠标时未检测到JLabel,java,swing,user-interface,mouse,Java,Swing,User Interface,Mouse,我正在使用netbeans,我正在动态地将带有形状的标签添加到我的jpanel中。但是,我在面板中添加了一个鼠标侦听器,但它仅在鼠标未在jlabel上时检测操作?有没有一种方法可以在我的鼠标侦听器中包含jPanel中的jLabel,而不向每个单独的jLabel添加侦听器 private void jPanel2MouseClicked(java.awt.event.MouseEvent evt) { for(int

我正在使用netbeans,我正在动态地将带有形状的标签添加到我的jpanel中。但是,我在面板中添加了一个鼠标侦听器,但它仅在鼠标未在jlabel上时检测操作?有没有一种方法可以在我的鼠标侦听器中包含jPanel中的jLabel,而不向每个单独的jLabel添加侦听器

private void jPanel2MouseClicked(java.awt.event.MouseEvent evt) {                                     
    for(int a = 0; a< states.size(); a++) {
        if(states.get(a).contains(evt.getPoint())) {
            if(states.get(a).getIcon() == rectangleIcon) {
                if(yellow == true) {
                    states.get(a).setIcon(yellow2Icon);
                    yellow = false;
                } else if (yellow != true){
                    states.get(a).setIcon(yellowIcon); 
                    jPanel2.revalidate();
                    jPanel2.repaint();
                    yellow = true;
                }
            } else {
                states.get(a).setIcon(rectangleIcon);
                yellow = false;
            }
            x2 = evt.getPoint();
        } 
    }
}    

通过在函数内部的某个位置粘贴
打印
行,尝试确保该函数被调用。像这样:

private void jPanel2MouseClicked(java.awt.event.MouseEvent evt) {
    System.out.println("this method was called");                                 
    for(int a = 0; a < states.size(); a++) {
        if (states.get(a).contains(evt.getPoint())) {
            if (states.get(a).getIcon() == rectangleIcon) {
                if (yellow)
                    states.get(a).setIcon(yellow2Icon);
                else {
                    states.get(a).setIcon(yellowIcon); 
                    jPanel2.revalidate();
                    jPanel2.repaint();
                }
                yellow = !yellow;
            } else {
                states.get(a).setIcon(rectangleIcon);
                yellow = false;
            }
            x2 = evt.getPoint();
        } 
    }
}    
private void jPanel2MouseClicked(java.awt.event.MouseEvent evt){
System.out.println(“调用此方法”);
对于(int a=0;a
JLabel不应该从底层JPanel窃取鼠标点击,除非JLabel还附带了鼠标侦听器——是吗?考虑创建和发布你的.WOW你是对的,当我第一次初始化它时,我写了一个鼠标器,而且我从来不知道WOW的感谢。
private void jPanel2MouseClicked(java.awt.event.MouseEvent evt) {
    System.out.println("this method was called");                                 
    for(int a = 0; a < states.size(); a++) {
        if (states.get(a).contains(evt.getPoint())) {
            if (states.get(a).getIcon() == rectangleIcon) {
                if (yellow)
                    states.get(a).setIcon(yellow2Icon);
                else {
                    states.get(a).setIcon(yellowIcon); 
                    jPanel2.revalidate();
                    jPanel2.repaint();
                }
                yellow = !yellow;
            } else {
                states.get(a).setIcon(rectangleIcon);
                yellow = false;
            }
            x2 = evt.getPoint();
        } 
    }
}