Java稍后删除并添加回MouseListener

时间:2014-07-25 07:18:50

标签: java swing jlabel mouselistener

我有4 JLabel个。

首次点击时

我将背景颜色更改为红色并删除了我点击过的JLabelMouseListener

第二次点击后

我将背景颜色更改为绿色,但我之前点击的JLabel不应该从红色变为绿色,因为我已经删除了MouseListener

第三次点击后

我想将MouseListener添加回第一次点击时删除的JLabel MouseListener并将背景颜色更改为黑色,但我不知道如何添加回来。

我尝试在addMouseListener中使用addbackMouseListener(JLabel label)方法,但似乎我无法在参数中传入“this”,我不知道在{{的参数中传递了什么1}}。

addMouseListener

代码:

public void addbackMouseListener(JLabel label) {
    label.addMouseListener(this); <-- can't pass in this, what can I do?
}

2 个答案:

答案 0 :(得分:4)

this引用rMouseListener,其中JFrame延伸,但未实现MouseListener

您最好的选择可能是让您的原始MouseAdapter成为内部课程,并在创建课程时创建一个实例,只需添加和删除它

例如......

public class rMouseListener extends JFrame {
    //...
    private MouseListener mouseListener;

    public rMouseListener() {

        mouseListener = new MouseHandler();
        for(int i = 0; i< 4; i++) {
            jLabel[i].setText(i + " ");
            panel.add(jLabel[i]);
            jLabel[i].addMouseListener(mouseListener);
        }
        //...
    }

    public void addbackMouseListener(JLabel label) {
        label.addMouseListener(mouseListener); 
    }

    //...

    public MouseHandler extends MouseAdapter {
        @Override
        public void mousePressed(MouseEvent e) {
            JLabel label =(JLabel) e.getSource();
            clickCount++;

            /*remove the mouseListener for the label that is clicked*/
            if(clickCount == 1) {
                label.setBackground(Color.red);
                label.setOpaque(true);
                label.removeMouseListener(this);
                mouseRemoved = true;
            }

            /* to verify that the mouseListener for that label is removed after
            first click.*/
            else if(clickCount == 2) {
                label.setBackground(Color.green);
                label.setOpaque(true);
            }

            /*check if the mouseListener is removed.
              add back the mouseListener to the one that is perviously
              removed at clickCount = 1 if it's removed*/
            else if(clickCount == 3) {
                if(mouseRemoved) {
                    addbackMouseListener(label);
                    label.setBackground(Color.black);
                }
            }


        }
    }
}

答案 1 :(得分:1)

替换:

addbackMouseListener(label);

label.addMouseListener(this);

您不需要addBackMouseListener方法。

希望这有帮助