jqaini520
2011-01-07 17:07
采纳率: 0%
浏览 204
已采纳

怎样用swing做一个类似于摇奖的程序

怎样用swing做一个类似于摇奖的程序,从100个数字中,每次屏幕显示不重复的5个数字,点停止的时候,屏幕显示当前5个数字。即为中奖号码???

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • lang_shao 2011-01-12 09:30
    已采纳

    [quote]麻烦看下附件,很奇怪,我把
    /* ************* 就是这一段 **********/ 标注之间的代码移到 paint(方法里以后。 run()方法的循环条件即使为false停止循环了,但是界面上还是在不停的repaint。 [/quote]

    repaint只是发送了一个事件,虽然停止了,但paint还没做完,所以会继续做。
    this.repaint(); 换成 this.paint(); 就好了。

    [quote]但是把那一段代码放到run()方法的this.repaint();之前,就可以正常停止循环。但是运行的时候,有时会报错[/quote]
    ArrayList是线程不安全的,所以可能会出错。可以这样写 list = Collections.synchronizedList(new ArrayList());

    已采纳该答案
    打赏 评论
  • lang_shao 2011-01-07 17:28

    [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]

    打赏 评论
  • lang_shao 2011-01-10 08:44

    [quote]show(result); // 重新显示result, 你可以自己实现吗?
    重新显示:是啥意思呢[/quote]

    就是把结果显示到屏幕。因为原来有显示五个数字了,要先去掉,再显示新的五个,所以说“重新显示”。

    打赏 评论
  • lang_shao 2011-01-11 14:19

    [quote]我发现有时候在this.repaint();没有执行完的时候,就重新开始下一轮的循环,导致list.clear(); //每次循环前 清空原有list的内容 为空了。然后this.repaint();没有执行完,里面的for循环list为空,就会出错了。 怎么办呢?[/quote]

    把 list 放在 paint 那里生成,每过一段时间 repaint 一次就好了。

    打赏 评论

相关推荐 更多相似问题