关于java鼠标监听的基础问题
比如我初始化一个3X3的网格,然后初始化其中一个上面写上“clickme”,我的目标是当我鼠标移动到这个格子的时候,这个"clickme"就自动跑到别的格子去了(这样相当...
比如我初始化一个3X3的网格,然后初始化其中一个上面写上“click me”,我的目标是当我鼠标移动到这个格子的时候,这个"click me"就自动跑到别的格子去了(这样相当于我永远点不到它)。
现在我在编程的时候在监听这个环节出问题了。 因为每次click me变换位置后,相当于我监听的网格也发生了相应的变化,而原来监听的位置要取消监听!但这具体如何做到呢。
附上我的代码:
import javax.swing.*;
import java.awt.event.*;
import java.awt.GridLayout;
public class CatchButtonGameV1 extends JFrame implements MouseListener{
JButton[] myButton = new JButton [9];
int a;
public CatchButtonGameV1 () {
this.getContentPane().setLayout(new GridLayout(3,0));
this.setTitle("Catch me if you can");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400, 400);
this.setVisible(true);
}
public static void main (String [] args) {
CatchButtonGameV1 myCatch = new CatchButtonGameV1 ();
myCatch.play();
}
public void play () {
for (int i=0; i<9; i++) {
myButton[i] = new JButton("");
this.getContentPane().add(myButton[i]);
}
a = (int)(Math.random()*9);
myButton[a].setText("Click me");
myButton[a].addMouseListener(this);
}
public void mouseEntered (MouseEvent event) {
myButton[a].setText("");
this.a = (int)(Math.random()*9);
myButton[a].setText("Click me");
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
} 展开
现在我在编程的时候在监听这个环节出问题了。 因为每次click me变换位置后,相当于我监听的网格也发生了相应的变化,而原来监听的位置要取消监听!但这具体如何做到呢。
附上我的代码:
import javax.swing.*;
import java.awt.event.*;
import java.awt.GridLayout;
public class CatchButtonGameV1 extends JFrame implements MouseListener{
JButton[] myButton = new JButton [9];
int a;
public CatchButtonGameV1 () {
this.getContentPane().setLayout(new GridLayout(3,0));
this.setTitle("Catch me if you can");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400, 400);
this.setVisible(true);
}
public static void main (String [] args) {
CatchButtonGameV1 myCatch = new CatchButtonGameV1 ();
myCatch.play();
}
public void play () {
for (int i=0; i<9; i++) {
myButton[i] = new JButton("");
this.getContentPane().add(myButton[i]);
}
a = (int)(Math.random()*9);
myButton[a].setText("Click me");
myButton[a].addMouseListener(this);
}
public void mouseEntered (MouseEvent event) {
myButton[a].setText("");
this.a = (int)(Math.random()*9);
myButton[a].setText("Click me");
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
} 展开
展开全部
你这个写法有点问题,其实只要有一个button接受事件,然后不断的改变这个button所在位置就行了。
不过你既然这样写了,改的方法也容易:
然后在button的enter方法上判断当前button的title是不是 Click Me,,
1. 如果是就将title修改成空串,并随机修改另一个button的title为ClickMe;
2. 否则什么也不做
不过你既然这样写了,改的方法也容易:
然后在button的enter方法上判断当前button的title是不是 Click Me,,
1. 如果是就将title修改成空串,并随机修改另一个button的title为ClickMe;
2. 否则什么也不做
更多追问追答
追问
你好,我的这几行代码是你说的那个意思吗?我刚学java不久,不是很懂。但我现在每次还是只能监听一个位置,那个click me倒是可以每次都换,您运行下我的代码就都明白我的问题在哪了。十分感谢啊!!!
public void mouseEntered (MouseEvent event) {
myButton[a].setText("");
this.a = (int)(Math.random()*9);
myButton[a].setText("Click me");
}
追答
这段代码没问题,不过,你要把所有的button都加上监听就行了,也就是把这段代码:
myButton[a].addMouseListener(this);
改为:
for(int i = 0 ; i < 9; i++){
myButton[i].addMouseListener(this);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询