我怎样才能从不同的班级到达进度条?

时间:2012-09-07 06:59:31

标签: java netbeans

我在a.java类中有一个进度条(在表单中)。我需要从b.java类中获取它。 我的进度条名称是jprog。(我把它放在palet的表单中) 如何设置公开我的进度条?我无法在属性页面中找到它。 我在一流的进步空间。但是我想在第二堂课改变它的价值。 感谢。

3 个答案:

答案 0 :(得分:1)

您可以添加到将更新进度条的类方法。然后您不必直接触摸进度条。

答案 1 :(得分:1)

考虑在第一堂课中添加PropertyChangeListener,在第二堂课中使用SwingWorker。 SwingWorker有一个名为setProgress()的方法,您可以调用该方法来设置进度条的值。然后,您可以覆盖第一堂课中的propertyChange()方法并执行以下操作:

public void propertyChange(PropertyChangeEvent evt) {
    if ("progress" == evt.getPropertyName()) {
      int progress = (Integer) evt.getNewValue();
      progressBar.setValue(progress);
    }
}

使用几个类 ClassA ClassB 的示例如下:

public ClassA extends JForm implements PropertyChangeListener{
    private JProgressBar progressBar;

    public ClassA(){
        /**
        * Your setup for the form
        */
    }

     /**
     * Invoked when task's progress property changes.
     */
    public void propertyChange(PropertyChangeEvent evt) {
        if ("progress" == evt.getPropertyName()) {
            int progress = (Integer) evt.getNewValue();
            progressBar.setValue(progress);
        }
    }

    public void someMethod(){
        ClassB classB = new ClassB();
        classB.addPropertyChangeListener(this);
        classB.execute();
    }
}

class ClassB extends SwingWorker<Void, Void> {
        /*
         * Main task. Executed in background thread.
         */
        @Override
        public Void doInBackground() {
            Random random = new Random();
            int progress = 0;
            //Initialize progress property.
            setProgress(0);
            //Sleep for at least one second to simulate "startup".
            try {
                Thread.sleep(1000 + random.nextInt(2000));
            } catch (InterruptedException ignore) {}
            while (progress < 100) {
                //Sleep for up to one second.
                try {
                    Thread.sleep(random.nextInt(1000));
                } catch (InterruptedException ignore) {}
                //Make random progress.
                progress += random.nextInt(10);
                setProgress(Math.min(progress, 100));
            }
            return null;
        }
}

答案 2 :(得分:0)

如果您想通过按ClassA上的按钮来更新进度条,我仍然建议使用Sujay的解决方案,但是您需要使用Runnable上下文调用您的方法。避免在可能阻止更新progressBar的事件调度线程的上下文中执行操作非常重要

public void someMethod(){
    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {

            // Some stuff
            classB.addPropertyChangeListener(this);
            classB.execute();

        }
    });

}