Java稍后删除并添加回MouseListener
我有4个Java稍后删除并添加回MouseListener,java,swing,jlabel,mouselistener,Java,Swing,Jlabel,Mouselistener,我有4个JLabels 第一次单击时: 我将背景颜色更改为红色,并删除了我单击的JLabel鼠标侦听器 第二次单击时: 我将背景颜色更改为绿色,但是我之前单击的JLabel不应该从红色更改为绿色,因为我已经删除了MouseListener public void addbackMouseListener(JLabel label) { label.addMouseListener(this); <-- can't pass in this, what can I do? } 第三
JLabel
s
第一次单击时:
我将背景颜色更改为红色,并删除了我单击的JLabel
鼠标侦听器
第二次单击时:
我将背景颜色更改为绿色,但是我之前单击的JLabel
不应该从红色更改为绿色,因为我已经删除了MouseListener
public void addbackMouseListener(JLabel label) {
label.addMouseListener(this); <-- can't pass in this, what can I do?
}
第三次单击时:
我想将MouseListener
添加回第一次单击时已删除的JLabel
MouseListener
,并将背景色更改为黑色,但我不确定如何添加回
我试图在我的addbackMouseListener(JLabel标签)
中使用addMouseListener
方法,但似乎我无法在参数中传递“this”,我不知道在addMouseListener
的参数中传递什么
public void addbackMouseListener(JLabel label) {
label.addMouseListener(this); <-- can't pass in this, what can I do?
}
public void addbackMouseListener(JLabel标签){
label.addMouseListener(this);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);
}
}
}
}
}
公共类rMouseListener扩展JFrame{
//...
私人穆塞利斯滕纳;
公共资源监听器(){
mouseListener=新的鼠标手柄();
对于(int i=0;i<4;i++){
jLabel[i].setText(i+);
增补(jLabel[i]);
jLabel[i].addMouseListener(mouseListener);
}
//...
}
公共无效addbackMouseListener(JLabel标签){
label.addMouseListener(mouseListener);
}
//...
公共鼠标手柄扩展鼠标头适配器{
@凌驾
公共无效鼠标按下(MouseEvent e){
JLabel=(JLabel)e.getSource();
点击计数++;
/*移除所单击标签的鼠标侦听器*/
如果(单击计数=1){
标签.立根背景(颜色.红色);
label.set不透明(true);
标签。移除鼠标侦听器(本);
鼠标移动=真;
}
/*验证该标签的鼠标侦听器是否在
第一次点击*/
否则如果(单击计数==2){
标签.背景(颜色.绿色);
label.set不透明(true);
}
/*检查鼠标固定器是否已拆下。
将鼠标听筒添加回已损坏的鼠标听筒
如果已删除,则在clickCount=1时删除*/
否则如果(单击计数==3){
如果(鼠标移动){
addbackMouseListener(标签);
标签。背景(颜色:黑色);
}
}
}
}
}
此
指的是扩展了JFrame
的rMouseListener
,它不实现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);
}
}
}
}
}
公共类rMouseListener扩展JFrame{
//...
私人穆塞利斯滕纳;
公共资源监听器(){
mouseListener=新的鼠标手柄();
对于(int i=0;i<4;i++){
jLabel[i].setText(i+);
增补(jLabel[i]);
jLabel[i].addMouseListener(mouseListener);
}
//...
}
公共无效addbackMouseListener(JLabel标签){
label.addMouseListener(mouseListener);
}
//...
公共鼠标手柄扩展鼠标头适配器{
@凌驾
公共无效鼠标按下(MouseEvent e){
JLabel=(JLabel)e.getSource();
点击计数++;
/*移除所单击标签的鼠标侦听器*/
如果(单击计数=1){
标签.立根背景(颜色.红色);
label.set不透明(true);
标签。移除鼠标侦听器(本);
鼠标移动=真;
}
/*验证该标签的鼠标侦听器是否在
第一次点击*/
否则如果(单击计数==2){
标签.背景(颜色.绿色);
label.set不透明(true);
}
/*检查鼠标固定器是否已拆下。
将鼠标听筒添加回已损坏的鼠标听筒
如果已删除,则在clickCount=1时删除*/
否则如果(单击计数==3){
如果(鼠标移动){
addbackMouseListener(标签);
标签。背景(颜色:黑色);
}
}
}
}
}
更换:
addbackMouseListener(label);
与
您不需要addBackMouseListener
方法
希望这有助于取代:
addbackMouseListener(label);
与
您不需要addBackMouseListener
方法
希望这有帮助