当前位置: 首页 > 面试题库 >

在for循环中更新JLabel的问题

赖俊
2023-03-14
问题内容

我程序的想法是从以前保存在其他JFrame中的列表中选择一个名称。我想在标签中一个接一个地打印所有名称,它们之间的间隔很小,然后停在其中一个名称上。问题是,lbl.setText("String");如果有多个setText代码,则无法正常工作。

这是我的代码的一部分:

public void actionPerformed(ActionEvent e)
{
    if (RandomNames.size != 0) 
    {
        for (int i = 0; i < 30; i++)
        {
            int rand = (int)(Math.random() * RandomNames.size);   
            stars.setText(RandomNames.list.get(rand));

            try
            {
                Thread.sleep(100);
            }
            catch (InterruptedException err)
            {
                err.printStackTrace();
            }
        }

        int rand2 = (int)(Math.random() * RandomNames.size);
        stars.setText(RandomNames.list.get(rand2));
        RandomNames.list.remove(rand2);
        RandomNames.size = RandomNames.list.size();

    }

    if (RandomNames.list.size() == 0)
    {
        last.setText("\u062A\u0645 \u0638\u0647\u0648\u0631 \u062C\u0645\u064A\u0639 \u0627\u0644\u0623\u0633\u0645\u0627\u0621 \u0627\u0644\u062A\u064A \u0641\u064A \u0627\u0644\u0642\u0627\u0626\u0645\u0629 !");
    }
}

问题答案:

不要使用循环或Thread.sleep。只需使用即可javax.swing.Timer。以下将导致每1000毫秒发生30 次迭代
。您可以相应地调整代码,使其适应actionPerformed每隔毫秒发生一次的情况。

int count = 0;
...
Timer timer = new Timer(1000, new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e){
        if (count == 30) {
            ((Timer)e.getSource()).stop();
        } else {
            int rand = (int) (Math.random()* RandomNames.size);   
            stars.setText(RandomNames.list.get(rand));
            count++;
        }
    }
});
timer.start();

如果需要,您可以Timer在构造函数中设置,并start()actionPerformed另一个按钮的侦听器的中设置它。

在如何使用Swing计时器中查看更多信息



 类似资料:
  • 我有一个网络应用编程接口,多个列表,和一个从网络应用编程接口查询数据的函数。我已经设法手动更新列表,一次一个。然而,数据有多个列(列表将包含列的数据),并且有38个列表并手动调用函数来更新它们是很麻烦的。我设计了一个简短的for循环来迭代列表,并相应地更新它们。但是,更新后的列表不会返回;或者甚至没有更新。如何在代码中修复此问题?请参阅下面的代码,虽然我不能提供API上的数据: =========

  • 问题内容: 我遇到了一个问题,在这里我想使用GUI从python程序运行几个命令行功能。我不知道我的问题是否特定于 PyQt4, 或者是否与我对Python代码的错误使用有关。 我希望做的是在GUI上有一个标签,以更改其文本值以通知用户正在执行哪个命令。但是,当我使用 for 循环运行多个命令时,就会出现我的问题。我希望标签在每个循环中进行更新,但是,该程序不是在每个循环中更新GUI标签,而是仅在

  • 我正在编写一个计算e^x值的方法。我在python中实现它的方式如下。 这将很好地返回e^x的值。但是,当我尝试在c#中实现相同的方法时,它没有输出与python中相同的值。以下是c#中的实现。 起初,这段代码的输出是一个无穷大符号。为了解决这个问题,我只是减少了循环运行的次数。在c#中,循环只运行10次,代码的输出非常接近于python中循环运行100次的输出。我的问题是,在不同的编程语言中,两

  • 问题内容: 我目前无法正常工作的应用程序部分是能够一次滚动浏览并显示一张图像列表。我从用户那里得到一个目录,在该目录中的所有文件中进行后台处理,然后加载仅包含jpeg和png的数组。接下来,我想用第一个图像更新JLabel,并提供上一个和下一个按钮以滚动浏览并依次显示每个图像。当我尝试显示第二张图像时,它没有更新…这是到目前为止我得到的: 我用来更新图像的方法: 然后在我的createAndSho

  • 问题内容: 我试图在for循环内发出几个服务器请求。我发现了[\这个问题,\并实施了建议的解决方案。但是,它似乎不起作用。 如果我删除了for循环并将所有xmlhttp [i]更改为xmlhttp,那么对于一个元素来说一切都很好,但是我无法发出多个请求。在此先感谢您的任何建议。 问题答案: 尝试下面的代码段 响应

  • 问题内容: 最终它将在jLabel上显示最终编号,但不会递增更新编号。任何帮助 问题答案: Swing是单线程的 。因此, 长时间运行的任务绝不应在EDT中进行 。这包括睡觉。而是使用。这将在后台线程中延迟,然后发布要在EDT中执行的操作。 也可以看看: 如何使用摇摆计时器 该SSCCE模仿一个计数器,该计数器从每秒开始计数(即更新实例),直到应用程序终止。