java - JLabel 上的动态 Swing 刷新

标签 java swing refresh updates

我正在做练习来学习 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 很简单并且效果很好。请阅读thisthis了解更多信息。

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/

相关文章:

java - 如何通过在java中传递相对路径来获取文件?

java - 可以从 SortedMap 中获取有序集合吗?

java - 防止在调整 JButton 的容器大小时调整其大小

java - 动态更改 JTable 字体大小

java - 为具有多个页面的Java应用程序创建可执行文件

ios - 新帖子后自动更新表格

java - 使用jsoup登录网站

java - RCP - 如何用另一个图像装饰图像

javascript - 如何在超过一定宽度阈值时刷新页面?

java - Java中基于控制台的进度