
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) {}
}
} 展开
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) {}
}
} 展开
1个回答
展开全部
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);
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循环去掉啊?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询