2014-04-08 3 views
0

progressBar을 클래스가 생성하는 값으로 업데이트하려고 시도하고 SwingWorker으로 보냅니다. GUI에 SwingWorker를 사용하여 gui를 업데이트하십시오.

나는이 방법이 있습니다

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

을하고 난이도하고 있어요 : 나는에서 변수의 값을 업데이트하는 방법 "setProgress"이있는 SwingWorker에서

private void startWorker(){ 
    worker = WorkerUpdater.getInstance();  
    worker.addPropertyChangeListener(this); 
    worker.execute(); 
} 

을 그것을 계산하는 객체와 그 다음에 나는 SwinWorker이이 값을 읽고 progressBar을 다시 칠하고 싶습니다.

doInBackground() 방법으로 어떻게 할 수 있습니까? 다음 방법이 있지만 SwingWorker 속성 "진행률"값이 변경 될 때마다 progressBar을 업데이트하려고합니다.

그런 식으로 작동하지만 다른 클래스가 SwingWorker의 특성에서 "진행률"을 수정할 때만 progressBar를 업데이트하려고합니다. 내가 어떻게 해?

@Override 
    public Void doInBackground() throws Exception { 
     while(this.progress<100){ 
      setProgress(this.progress+10); 
      this.progress += 10; 
     }  
     return null; 
    } 

답변

0

하고는 나는 SwinWorker이 값 개미가 progressBar을 다시 칠 읽도록합니다. setProgress가 이벤트 디스패치 스레드에서 열릴 예정이라고 때마다 PropertyChangeListener에 전달 될 속성 변경 통지, 그래서 propertyChanged이 같은 구성 요소를 업데이트 할 수있는 올바른 장소이다 SwingWorker 보장 -

이 필요하지 않습니다 진행 표시 줄.

+0

하지만 doProgress를 doInBackground() 메소드에서 호출해야합니까? 다른 클래스에서 setProgress를 호출 할 수 있습니까? 마찬가지로 : Worker.getInstance(). setProgress (x) – mreigosa

+0

@mreigosa 문제는'setProgress'가 SwingWorker에서'protected'와'final'으로되어'Worker' 클래스 밖에서 접근 할 수 없다는 것입니다. 바깥에서 호출 할 수 있기를 원한다면 다른 메소드'public void progress (int p) {setProgress (p); } '또는'외부인 '이 전화를 걸어도 비슷합니다. –

+0

진전 바의 가치는 변하지 않았다고 말 했어요. 무슨 일이야? SwingWorker에 보내는 값이 정확하기 때문에 이해할 수 없습니다. 배경 방법으로 SwingWorker를 어떻게해야합니까? – mreigosa

관련 문제