>

진행률 표시 줄을 만드는 데 문제가 있습니다. 'GiveRating'기능이 얼마나 진행 중인지 막대에 표시하고 싶습니다. 매우 정확할 필요는 없습니다. Java를 처음 사용하므로 간단한 단어로 설명하십시오. GUI에 Java SWT를 사용하고 있습니다

// this is the new progress bar which is showing in a shell:
ProgressBar progressBar = new ProgressBar(shlRatingScheme, SWT.NONE); 
progressBar.setForeground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
progressBar.setBounds(10, 208, 170, 17);

// this is the button that's starts the process:
btnFotosRaten.setText("Foto's raten");
btnFotosRaten.setBounds(185, 270, 75, 25);
btnFotosRaten.addListener(SWT.Selection, new Listener(){
public void handleEvent(Event e) {switch (e.type) {case SWT.Selection:
PhotoRating d = new PhotoRating();
if(sFolder == null | dFolder == null) {
String message ="Vul bronmap en doelmap in AUB!";
JOptionPane.showMessageDialog(new JFrame(), message, "Oeps", JOptionPane.ERROR_MESSAGE);
}else {
d.GiveRating(dFolder);
// so I would like to let the progress bar show how far d.GiveRating(dfolder) is. Is there a simple way to do that?
}
String message ="De foto's in "+dFolder+" zijn gerated!"; JOptionPane.showMessageDialog(new JFrame(), message, "Info", JOptionPane.INFORMATION_MESSAGE);
break;
}
}
});


  • 답변 # 1

    기능이 실행될 때 "감시"할 수 없습니다. 당신이 할 수있는 일은 기능이 무엇을하는지 알려주는 것입니다.

    "관찰자 패턴"(https://en.wikipedia.org/wiki/Observer_pattern)을 구현할 수 있습니다. 귀하의 경우 함수 실행을 관찰하고 모든 이벤트마다 진행률 표시 줄을 업데이트하는 중간 클래스가 필요합니다.

    같은 것

    public class ProgressBarObserver implements Observer{
     ProgressBar pb;
     public ProgressBarObserver(ProgressBar pb){
       this.pb = pb;
     }
     @Override
     public void update(int progress){
      pb.step(progress); // cannot recall the correct function for progressbar
     }
    }
    public class Worker implements Observable{
     Observer o;
     public Worker(Observer o){
       this.o = o;
     }
     public void doSomething(){
     //something
     o.update(1);
     //something else
     o.update(1);
     //some other stuff
     o.update(1);
     //and so on
     }
    }
    public class Manager {
     public static void main(String... args){
     ProgressBar pb = new ProgressBar();
     ProgressBarObserver pbo = new ProgressBarObserver(pb);
     Worker w = new Worker(pbo);
     w.doSomething();
     }
    }
    
    

    도움을 빕니다!

관련 자료

  • 이전 c# - leetcode - 왼쪽 하단 트리 값 찾기
  • 다음 dynamic data - DynamicData 및 ReactiveUI에서 자동 새로 고침