gpt4 book ai didi

java - JTextArea 追加 for 循环的结果

转载 作者:行者123 更新时间:2023-12-01 06:18:16 25 4
gpt4 key购买 nike

我有代码:

   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

最佳答案

这可能会满足您的要求:

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 必须是最终的才能在匿名内部类中使用。但要实现这一点,您必须通过构造没有任何监听器的计时器、创建监听器然后添加它来解决问题。

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();
}

如果你将第一段代码放入一个方法中,你会得到它提示不是最终的。

如果你只是将其定为最终版本,它会提示你无法在 timer 上调用 stop(),因为 timer 可能不已初始化。

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

关于java - JTextArea 追加 for 循环的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18344781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com