java - 为什么我可以点击隐藏的 JLabel?

标签 java click jlabel

我正在用 Java 制作 GUI。
我正在使用 JLabel,并使用此代码为它们提供一些“onclick”事件:

myJLabel.addMouseListener(new MouseAdapter(){  
    public void mouseClicked(MouseEvent e){
       System.out.println("Yeah !!!!");
    }
});

它正在发挥作用,“是啊!!!”正在打印。
问题是,如果我在“myJLabel”上方有其他 JLabel,我仍然可以单击“myJLabel”。
以下是一些图片来解释:

“myJLabel”是红色的 JLabel。当我点击它时,粉红色的 JLabel 正在移动。所以一切都好:D)
enter image description here
但如果粉红色的 JLabel 位于“myJLabel”上方,我仍然可以单击它:'(。 enter image description here
我的问题是:我该如何预防?

<小时/> 编辑:这是我的完整代码:

import javax.swing.*;
import javax.swing.border.*;
import javax.accessibility.*;

import java.awt.*;
import java.awt.event.*;

public class Test extends JPanel{
    private String[] layerStrings = { "Yellow (0)", "Magenta (1)", "Cyan (2)",   "Red (3)", "Green (4)" };
    private Color[] layerColors = { Color.yellow, Color.magenta, Color.cyan, Color.red, Color.green };

    private JLayeredPane layeredPane;
    private JLabel dukeLabel;

    public Test(){
        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));

        //Create and set up the layered pane.
        layeredPane = new JLayeredPane();
        layeredPane.setPreferredSize(new Dimension(300, 310));
        layeredPane.setBorder(BorderFactory.createTitledBorder(""));


        JLabel label1 = createColoredLabel(layerStrings[1], layerColors[1], new Point(10, 10));
        JLabel label2 = createColoredLabel(layerStrings[2], layerColors[2], new Point(30, 30));

        label1.addMouseListener(new MouseAdapter(){  
            public void mouseClicked(MouseEvent e){
               System.out.println("Yeah !!!!");
            }
       });

        layeredPane.add(label1, new Integer(1));
        layeredPane.add(label2, new Integer(2));

        add(layeredPane);
    }

    //Create and set up a colored label.
    private JLabel createColoredLabel(String text, Color color, Point origin) {
        JLabel label = new JLabel(text);
        label.setVerticalAlignment(JLabel.TOP);
        label.setHorizontalAlignment(JLabel.CENTER);
        label.setOpaque(true);
        label.setBackground(color);
        label.setForeground(Color.black);
        label.setBorder(BorderFactory.createLineBorder(Color.black));
        label.setBounds(origin.x, origin.y, 140, 140);
        return label;
    }

    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("LayeredPaneDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        JComponent newContentPane = new Test();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

最佳答案

在事件函数中添加此命令。基本上是说如果不显示,则不执行任何操作。

if(!this.isShowing())return;

关于java - 为什么我可以点击隐藏的 JLabel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31848935/

相关文章:

java - 使用 Apache Axis 时如何打印 SOAP 消息内容

java - 这是根据规范进行的 Java 双重解析行为吗?

android - 在不打开 Android 应用程序的情况下执行操作

java - (Java) JLabel 的 setBounds 问题

java - JRE 到期日

java - 排列数组并将每个结果保存到 ArrayList

java - Java中检查鼠标是否被点击

python - 如何使用 Click.secho 仅将一个单词设置为特定颜色

Java - 设置 JLabel 的宽度/高度

Java - 如何仅更改 JLabel 的一部分字体/添加边框