Java - disable click after clicking JLabel

I want to disable click again on the same jLabel.

For instance,

I have 3 JLabels = JLabel1, JLabel2, JLabel3. If I clicked JLabel1. I want to disable click for JLabel1, and only JLabel2 and JLabel3 are available for viewing.

I tried .setEnabled (false) in mousePressed, but it seems like I can still click JLabel.

How to disable click after clicking on JLabel?

public class LabelListener extends MouseAdapter {
    @Override
    public void mousePressed(MouseEvent e) {
        JLabel label = (JLabel) e.getSource();
        for(int i = 0; i< 3; i++) {
            if(label == jLabel[i]) {
                System.out.println("You clicked on " + i);
                label.setEnabled(false);
            }
        }
    }
+4
source share
2 answers

You can use something like this

public class LabelListener extends MouseAdapter {
    @Override
    public void mousePressed(MouseEvent e) {
        JLabel label = (JLabel) e.getSource();
        for(int i = 0; i< 3; i++) {
            if(label == jLabel[i]) {
                if(!label.isEnabled()){ // skip if label not enabled
                    return;
                }
                System.out.println("You clicked on " + i);
                label.setEnabled(false);
            }
        }
    }
+1
source

Just add a listener to the tag, which disables the tag, and removes itself as a listener.

JLabel label = new JLabel("Label");
label.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(final MouseEvent e) {
        super.mouseClicked(e);
        label.setEnabled(false);
        label.removeMouseListener(this);
    }
 });

Completely running example:

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Test {

    public static void main(String[] args) {

        JFrame jFrame = new JFrame();

        jFrame.getContentPane().setLayout(new FlowLayout());

        for(int i = 0; i < 3; i ++) {
            JLabel label = new JLabel("Label " + i);
            jFrame.getContentPane().add(label);
            label.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(final MouseEvent e) {
                    super.mouseClicked(e);
                    System.out.println("Clicked");
                    label.setEnabled(false);
                    label.removeMouseListener(this);
                }
            });
        }

        jFrame.pack();
        jFrame.setLocationRelativeTo(null);
        jFrame.setVisible(true);
    }
}
0
source

All Articles