怎样用swing做一个类似于摇奖的程序,从100个数字中,每次屏幕显示不重复的5个数字,点停止的时候,屏幕显示当前5个数字。即为中奖号码???
[quote]麻烦看下附件,很奇怪,我把
/* ************* 就是这一段 **********/ 标注之间的代码移到 paint(方法里以后。 run()方法的循环条件即使为false停止循环了,但是界面上还是在不停的repaint。 [/quote]
repaint只是发送了一个事件,虽然停止了,但paint还没做完,所以会继续做。
this.repaint(); 换成 this.paint(); 就好了。
[quote]但是把那一段代码放到run()方法的this.repaint();之前,就可以正常停止循环。但是运行的时候,有时会报错[/quote]
ArrayList是线程不安全的,所以可能会出错。可以这样写 list = Collections.synchronizedList(new ArrayList());
[code="java"]
boolean running = true; // 点停止时设为false,类变量
Random random = new Random();
Set finalResult = null;
while (running) {
Set result = new HashSet(5);
while (result.size() < 5) {
result.add(random.nextInt(100) + 1);
}
show(result); // 重新显示result, 你可以自己实现吗?
finalResult = result;
}
[/code]
[quote]show(result); // 重新显示result, 你可以自己实现吗?
重新显示:是啥意思呢[/quote]
就是把结果显示到屏幕。因为原来有显示五个数字了,要先去掉,再显示新的五个,所以说“重新显示”。
[quote]我发现有时候在this.repaint();没有执行完的时候,就重新开始下一轮的循环,导致list.clear(); //每次循环前 清空原有list的内容 为空了。然后this.repaint();没有执行完,里面的for循环list为空,就会出错了。 怎么办呢?[/quote]
把 list 放在 paint 那里生成,每过一段时间 repaint 一次就好了。