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

如何更改进度条和标签的值?

安明亮
2023-03-14
问题内容

JLabelJProgressBar不改变自己的价值,方法结束时才。

this.desSave.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        DownloadXml();
    }
});

private void DownloadXml() throws Exception {
    Integer a = 456;
    int value = (1000 / a) - 1;
    this.numDes.setText("0" + "/" + a);
    for (int i = 0; i < a; i++) {
        saveXml(ligas.get(i),i,path);
        this.numDes.setText(i + "/" + a); //this is a jlabel
        this.progressbar.setValue(value * i); //jprogressbar
    }
}

private void SaveXml(String xml,int a,String path) throws IOException {
}

问题答案:

您正在阻止事件分发线程,这将阻止它更新UI。您可以使用Thread,但Swing是单线程API,这意味着只能从事件分配线程的上下文中对UI进行更新。

您可以使用SwingWorker,这将允许您在后台线程中执行长时间运行的过程,但是它支持将更新安全地同步到UI。

加之其progressPropertyChange支持,就很容易进行管理,例如。

public class Worker extends SwingWorker<Object, Object> {

    @Override
    protected Object doInBackground() throws Exception {

        // The download code would go here...
        for (int index = 0; index < 1000; index++) {

            int progress = Math.round(((float)index / 1000f) * 100f);
            setProgress(progress);

            Thread.sleep(10);

        }

        // You could return the down load file if you wanted...
        return null;

    }
}

“进度窗格”

public class ProgressPane extends JPanel {

    private JProgressBar progressBar;

    public ProgressPane() {

        setLayout(new GridBagLayout());
        progressBar = new JProgressBar();

        add(progressBar);

    }

    public void doWork() {

        Worker worker = new Worker();
        worker.addPropertyChangeListener(new PropertyChangeListener() {
            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                if ("progress".equals(evt.getPropertyName())) {
                    progressBar.setValue((Integer) evt.getNewValue());
                }
            }

        });

        worker.execute();

    }

}

您可以在EDT中使用publish/
process支持和更新EDT,PropertyChange支持或工作人员的done方法,以安全完成工作时从EDT中获取工作人员的结果



 类似资料:
  • 如前所述(如何在Android系统中制作圆形自定义进度条在我的项目中使用https://github.com/Todd-Davies/ProgressWheel库。我正在开发具有不同级别集的游戏应用程序。我使用圆形进度条作为计时器。一旦用户获得高分,我想改变旋转速度。 请检查这里的图像示例。(如何创建圆形进度条(饼图)像指示器-Android)。我没有得到正确的解决方案来固定时间限制以及使用进度条

  • 问题内容: 对于y轴上的每个刻度标签,我想更改: 我正在绘制对数日志数据(以2为底),但是我希望标签显示原始数据值。 我知道我可以得到当前的y标签 这给了我一个列表: 每个列表都是 我在http://matplotlib.org/users/text_props.html上查看了文本对象的文档, 但是我仍然不确定更改每个文本标签中的字符串的正确语法是什么。 更改标签后,可以使用以下方法在轴上设置它

  • 问题内容: 我是Angularjs的新手,并且我尝试在控制器中的值更改时更新进度条的宽度。 我有类似的东西: 我的控制器中有类似以下内容的内容: 如何更新进度条的宽度值? 谢谢,阿尔贝托。 问题答案: ng-style指令可以解决问题。

  • 问题内容: 我想在ttk.notebook python 3x中更改选项卡标题的字体,宽度和高度 通过下面的代码,我可以只更改选项卡标题框的宽度 但是如何更改“框架1”的字体以及选项卡标题框的高度? 问题答案: 基于有关如何自定义笔记本标签的配置的答案,您可以将字体信息附加到创建的主题中,如下所示,以获取所需的字体类型: 另一种方法是直接配置笔记本的Tab样式。参见下面的代码。 您必须注意使用和

  • 我的kivy应用程序中有一个ProgressBar。我相信我需要使用,以确保从循环内部更新进度条。 以下代码是用于再现性目的的淡化版本。 ProgressBar类 主要类别: KV文件 此示例显示loading_pb.value按钮单击后代码循环时发生的变化。 进步吧。价值印刷输出 问题进度条的值似乎确实如预期的那样递增,但实际进度条直到循环结束时才立即改变。 相关的 无法更新kivy进度条 ki

  • 我有这个代码是用来显示文本到组合框。 在我的情况下,我无法将VBox插入到组合框中。任何想法,我该如何解决这个问题?