java小程序求修改~~!!!求助各位java大牛~

一个GUI有关的程序,有9个button在面板上,随机产生clickme在任一button上。要求玩儿这个小游戏的人去点clickme所在的那个button,但是当你的鼠... 一个GUI有关的程序,有9个button在面板上,随机产生clickme在任一button上。要求玩儿这个小游戏的人去点clickme所在的那个button,但是当你的鼠标移动到那个button区域内时,cllickme又跑到其他按钮去了,也就是说实际上你怎么也按不到clickme~ 我编完了,的确是永远也点不到那个clickme所在的button,但是有点小bug,因为滑鼠移到某个按钮时,这个按钮之外会有好几个clickme的button!!!~~本人刚学GUI,求大牛知道,clickme只能是出现在一个button上啊~在线等~加分哦~

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class GUI extends JFrame {
JPanel panel;
JFrame frame;
JButton button[]=new JButton[9];
public static void main(String[] args){
GUI gui=new GUI();
gui.go();
}
public void go(){
frame=new JFrame("Catch me if you can!");
panel=new JPanel();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.setLayout(new GridLayout(3,3,1,1));
frame.getContentPane().add(BorderLayout.CENTER,panel);
for (int i=0;i<button.length;i++){
button[i]=new JButton();
panel.add(button[i]);
button[i].addMouseMotionListener(new MoveListener());
}
frame.setSize(300, 200);
frame.setVisible(true);
}
class MoveListener implements MouseMotionListener{
public void mouseMoved(MouseEvent e){
int seed=(int)(Math.random()*9);
if(e.getSource().equals(button[seed]))
for(int i=1;i<=9;i++){
int seed2=(int)(Math.random()*9);
button[seed2].setText("click me");
}
button[seed].setText(null);
}
public void mouseDragged(MouseEvent e) {}
}
}
展开
 我来答
digizer0
2011-05-11 · TA获得超过194个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:167万
展开全部
MoveListener 里的
for(int i=1;i<=9;i++){
int seed2=(int)(Math.random()*9);

这样相当于对9个按钮都做了一次赋值,由于是随机数所以最终不是9个按钮都有click me,而是其中一部分有。

正确的做法是去掉循环,计算新的按钮的索引值,新旧相同就循环,直到找到新的不同的索引值
int seed2=(int)(Math.random()*9);
while (seed2==seed) seed2=(int)(Math.random()*9);
button[seed2].setText("click me");
button[seed].setText(null);
更多追问追答
追问
为什么run出来的还是这个样子挖?~~
追答
你有没有把for循环去掉啊?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式