Как обновить панель jprogress

У меня есть простая JForm и JDialog в моем приложении. Окно JDialog содержит элемент JProgressBar, и я помещаю метод в JDialog как,

 public void updateProgress(int val){
        prgProgress.setValue(val); //prgProgress-> name of the JProgressBar
    }

обновить индикатор выполнения.

Когда я пытаюсь обновить индикатор выполнения в моем JDialog из JForm, JProgressBar не обновляется должным образом, пожалуйста, сообщите мне, в чем может быть ошибка,

Ex.

public class Status extends javax.swing.JDialog{
 private javax.swing.JProgressBar prgProgress = new javax.swing.JProgressBar;
.....

public void updateProgress(int val){
            prgProgress.setValue(val); //prgProgress-> name of the JProgressBar
        }

.....

}

public class MyForm extends javax.swing.JInternalFrame {
    Status s = new Status();
    s.setVisible(true);
    for(int i=0; i<100; i++){
        s.updateProgress(i);
    }

}

person Harsha    schedule 15.02.2012    source источник


Ответы (2)


У вас возникла проблема с параллельным доступом в Swing, Swing является единственным потоки и ничего не происходит, если вы обновляете графический интерфейс из EDT, вам необходимо реализовать SwingWorker для обновления JProgressBar, пример с описаниями здесь

person mKorbel    schedule 15.02.2012

Во-первых, из приведенного выше кода я не вижу, что вы добавили JProgressBar в JDialog, но я предполагаю, что вы это сделали. Во-вторых, вы не установили максимальное значение JProgressBar ни из конструктора, ни из функции-члена setMaximum(). Это может быть причиной отсутствия прогресса.

Смотрите также:

http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html

person Victor Wong    schedule 15.02.2012
comment
Я установил максимальное значение jprogressbar, но проблема осталась. - person Harsha; 15.02.2012
comment
Чтобы уточнить вопрос, появился ли JProgressBar в JDialog, т.е. отображается полоса с нулевым прогрессом? - person Victor Wong; 15.02.2012
comment
Затем попробуйте использовать Thread, чтобы сделать JDialog видимым. Это связано с тем, что JDialog заблокирует текущий поток, который должен принадлежать форме после того, как он станет видимым. - person Victor Wong; 15.02.2012
comment
ОК, я нашел ошибку, я сделал setModel = true для JDialogs, после того как я удалил этот ход строки, он отображается нормально. но мне интересно, почему он не обновляется, когда setModel=true истинно. - person Harsha; 15.02.2012