我正在做练习来学习 Java 编程。我创建了一个主类,在其中简单地生成随机数并将每个数字添加到数组列表中。每次我在数组列表中插入一个新数字时,我都会计算发生变化的数组列表的平均值。
我陷入了以下部分:每次计算新平均值(每次添加随机数)时,我想在 JFrame 上实时显示。我为此创建了一个 JFrame 和一个 JLabel。那么JLabel就需要不断更新。
从那里我需要去什么方向? Swing worker ? Swing 计时器? Action 监听器?我已经阅读了一些关于让它在后台运行的必要性的帖子,多个线程,但我现在有点迷失,所以任何帮助将不胜感激。
public class TestSwing {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
TestFrame frame = new TestFrame();
frame.setBounds(300, 200, 700, 400);
// Variables
Random rn = new Random();
ArrayList<Integer> elements = new ArrayList<>();
//Generate random numbers
for(int i =0; i < 100; i++)
{
int answer = rn.nextInt(10) + 1;
// Add random numbers to array
elements.add (answer);
//Get average of array every time a new number is added to the array
int sum = 0;
for(int j=0; j < elements.size() ; j++)
{
sum = sum + elements.get(j);
}
//calculate average value
double average = sum / elements.size();
//Show Frame
frame.setVisible(true);
// This is where I am stuck
}
}
}
最佳答案
java.util.Timer
很简单并且效果很好。请阅读this和 this了解更多信息。
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
new Timer().scheduleAtFixedRate(new TimerTask() {
int counter = 0;
@Override
public void run() {
counter++;
if (counter >= 10) { // If ran 10 times, stop.
this.cancel();
}
int answer = rn.nextInt(10) + 1;
elements.add(answer);
int sum = 0;
for (int j = 0; j < elements.size(); j++) {
sum = sum + elements.get(j);
}
double average = sum / elements.size();
label.setText(String.valueOf(average)); // Set the text of the
// label (automatically
// repaints panel)
System.out.println(String.valueOf(average));
}
}, 500, 1000); // Run every second (= 1000 milliseconds), wait 500
// milliseconds before starting it.
关于java - JLabel 上的动态 Swing 刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32721486/