1

我有代码:

   Timer timer = new Timer(5000, new ActionListener() {
          public void actionPerformed(ActionEvent e) {

             for(int i=0;i<10;i++){
            textArea1.append("   "+i + "\n" + newline);
            textArea1.setCaretPosition(textArea1.getDocument().getLength());
             }
          }
       });
  ...
  ...
  timer.start();

它将 0 到 9 附加在一起。我想一个一个地打印 0 到 9。这意味着,在 GUI JTextArea 上,它将显示 0、1,然后是 2……每个数字之间有一点延迟。我已经问过这个问题,但这个问题似乎太混乱了。所以我写了上面更简单的例子。请帮忙。如果你们有兴趣,这里是这个问题的原始问题:java for-loop in GUI TextArea

4

2 回答 2

4

这可能会做你想要的:

Timer timer = new Timer(5000, new ActionListener() {
      private int i = 0;
      public void actionPerformed(ActionEvent e) {
        if (i > 10) {
          timer.stop();
        } else {
          textArea1.append("   "+i + "\n" + newline);
          textArea1.setCaretPosition(textArea1.getDocument().getLength());
          i++;
         }
      }
   });
...
...
timer.start();

在评论中,提到timer需要成为一个字段才能使其工作,如图所示。如果您希望它成为方法的局部变量,则该方法将如下所示。

请注意,timer它必须是 final 才能在匿名内部类中使用。但要使其工作,您必须通过构建没有任何侦听器的计时器来解决问题,创建侦听器然后添加它。

public void doit() {
    final Timer timer = new Timer(5000, null);

    ActionListener a = new ActionListener() {
        private int i = 0;

        public void actionPerformed(ActionEvent e) {
            if (i > 10) {
                timer.stop();
            } else {
                textArea1.append("   " + i + "\n");
                textArea1.setCaretPosition(textArea1.getDocument().getLength());
                i++;
            }
        }
    };
    timer.addActionListener(a);
    timer.start();
}

如果你把第一段代码放在一个方法中,你会得到它抱怨不是最终的。

如果你只是让它最终,它会抱怨你不能调用stop()timer因为timer可能没有被初始化。

评论中提到了其他解决方案。(感谢您提出这个问题,@kiheru)

于 2013-08-20T21:02:44.400 回答
-5

怎么用,Thread.sleep(10)

   Timer timer = new Timer(5000, new ActionListener() {
          public void actionPerformed(ActionEvent e) {

             for(int i=0;i<10;i++){
            textArea1.append("   "+i + "\n" + newline);
            textArea1.setCaretPosition(textArea1.getDocument().getLength());
                    Thread.sleep(10);
                 }
          }
       });
  ...
  ...
  timer.start();
于 2013-08-20T21:04:37.003 回答