java - 使用 java swing Timer 处理文本并将其附加到文本区域

标签 java swing timer actionlistener jtextarea

我有一个 JTextArea txtProcess 和 2 个要处理的方法:

第一种方法是使用 for 循环处理小于 10 的数字的乘法。将它们相乘后,所有结果将使用计时器附加到 txtProcess 中。

我使用计时器来延迟附加。例如,第一个结果附加到 txtProcess。 500 毫秒后,第二个结果附加到 txtProcess 中。依此类推,直到所有结果都附加到 txtProcess。

像这样:

int a = 10;
int result = 0;
for(int i=1; i <= a; i++){
    result = i * a;
    txtProcess.append("Result "+ i +" = "+ result);
}

下面是我尝试过的第一种方法的代码。

    void first(){
        ActionListener listen = new ActionListener(){
            public void actionPerformed(ActionEvent e){
                for(int i=1; i <= a; i++){
                    result = i * a;
                    txtProcess.append("Result "+ i +" = "+ result +"\n");
                    if(i == 9){
                        ((Timer)e.getSource()).stop();
                    }
                }
            }
        };    
        Timer mine = new Timer(500, listen);
        mine.start();
    }

但是,它并没有按照我的预期工作。我预计结果会一一附加到 txtProcess 中,而不是同时附加到 txtProcess 中。这是第一个问题。我该如何解决这个问题?

当第一个方法中的所有进程都执行完毕后,继续执行第二个方法。

第一种方法和第二种方法的过程之间有时间间隔。

我的意思是这样的:第一个方法执行完成后,第二个方法将在2秒后开始执行。如您所见,时间间隔为 2 秒(或可能更长)。

所以,我尝试这样:

    void second(){
        ActionListener listen = new ActionListener(){
            public void actionPerformed(ActionEvent e){
                for(int i=1; i <= a; i++){
                    result = i * a;
                    txtProcess.append("Result "+ i +" = "+ result +"\n");
                    if(i == 9){
                        ((Timer)e.getSource()).stop();
                    }
                }
            }
        };    
        Timer mine = new Timer(500, listen);
        mine.start();
    }

然后我创建了另一种方法来组合它们:

       void combine(){
            ActionListener listen = new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    first();
                    second();
                }
            };    
            Timer mine = new Timer(500, listen);
            mine.start();
        }

但是,第一个和第二个方法同时执行。这是第二个问题:在第一种方法和第二种方法之间创建间隔时间。我该如何解决这个问题?

注意: 您可能认为这个问题与 java for-loop in GUI TextArea 重复。 。我已经阅读并尝试了那里的代码,但它仍然无法解决问题。

最佳答案

Timer 的作用是每次达到时间间隔时执行 ActionListener 中的代码。 因此,如果您希望文本追加 10 次,则监听器内不得有 for 循环。计时器将为您处理循环。

ActionListener listener = new ActionListener(){
  private int counter = 0;
  @Override
  public void actionPerformed( ActionEvent e ){
     txtProcess.append("Result "+ counter +" = "+ result);
     counter++;
     if ( counter == 10 ){
       ((Timer)e.getSource()).stop();
     }
  }
}
Timer timer = new Timer( 500, listener );
timer.start();

我没有仔细检查上面的代码,因此它可能包含语法错误或循环次数过多/次数少于所需次数。它更多地说明了Timer的用法。

关于java - 使用 java swing Timer 处理文本并将其附加到文本区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23590285/

相关文章:

java - 运行时重新安排 @scheduled cron 表达式,无需重新启动应用程序

java - 让 JFreeChart 中的条形半透明?

java - 我的字符串末尾的最后一个字符 '\n' 已被修改为空格字符

java - 类不是抽象的,不会覆盖 java.util.timertask 中的抽象方法 run()

java - 需要 pdf 渲染器的帮助

java - 使用递归将句子逐字添加到集合中

java - 如何获取 Websphere 6.1 端口号

java - 如何动态构建 JMenu(而不仅仅是运行时创建)?

c# : set timer before loop, 在计时器结束 2 分钟后中断循环

应用程序的 C# 时间延迟