我有4 JLabel
个。
:
我将背景颜色更改为红色并删除了我点击过的JLabel
个MouseListener
。
:
我将背景颜色更改为绿色,但我之前点击的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?
}
答案 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
方法。
希望这有帮助