我有一个JTextArea txtProcess和2个要处理的方法:
第一种方法是使用for循环处理小于10的数字。将它们相乘后,所有结果将使用Timer附加到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上,而不是同时进行。这是第一个问题。我怎样才能解决这个问题?
当第一种方法中的所有过程都已执行时,该过程将继续执行第二种方法。
第一种方法的处理与第二种方法的处理之间存在时间间隔。
我的意思是这样:第一个方法执行完成后,第二个方法执行将在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
的用法。