JavaFX Jak obsłużyć"progress bar"

0

user image
Po wpisaniu pozycji i kliknięciu przycisku szukaj
user image
Chciałbym dodać progressIndicator tylko mam problem z odpowiednim wywołaniem. Obecnie pod przyciskiem jest to:

    public void szukajProgramBtn_Clicked(){
        szukajprogramowTilePane.getChildren().clear();
        FilmwebApi fwAPI = new FilmwebApi();
        List<FilmSearchResult> filmInfoList = fwAPI.findFilm(szukajprogramTextField.getText());//lista filmów o tytule zawierającym podaną frazę
        for(int i=0; i<filmInfoList.size(); i++){
            Image szukajPozycjaImage = new Image(filmInfoList.get(i).getImageURL());
            ImageView szukajPozycjaImageView = new ImageView(szukajPozycjaImage);
            szukajPozycjaImageView.setPreserveRatio(true);
            szukajprogramowTilePane.getChildren().add(szukajPozycjaImageView);
        }

Wywołanie nowego wątku i połączenie go z progressBar:

Task task = new Task<Void>() {
    @Override public Void call() {
        //cos
            updateProgress(i, max);
        }
        return null;
    }
};
progressIndicator = new ProgressIndicator();
progressIndicator.progressProperty().bind(task.progressProperty());
new Thread(task).start();

Cały czas mi sie zawiesza, gdy dodaje moją pętle for do task bo ma problem z szukajprogramowTilePane.getChildren().add(szukajPozycjaImageView); co wydaje sie logiczne, tylko nie bardzo wiem, jak poprawnie ten progressIndicator obsługiwać stąd moje pytanie. Bo chciałbym w pętli for dodać coś typu updateProgress(i, filmInfoList.size()) dla każdego przejścia pętli, aby owy wskaźnik postępu odzwierciedlał czas wczytywania obrazków do panelu szukajprogramowTilePane. Będę bardzo wdzięczny za kolejną wskazówkę.

1

Trochę nie bardzo rozumiem z Twojego opisu co dokładnie robisz ale wnioskuję, że to co robisz obecnie w pętli for chcesz w tej formie robić w metodzie call klasy Task. Jeżeli tak to:
Task wykonujesz w osobnym wątku a wszystkie zmiany związane z wyglądem i układem komponentów widoku muszą być realizowane w wątku obsługi zdarzeń. Inaczej to nie zadziała. Spróbuj:

Platform.runLater(() -> {
    szukajprogramowTilePane.getChildren().add(szukajPozycjaImageView);
});

W ten sposób ta linijka kodu zostanie wywołana w wątku obsługi zdarzeń.

1 użytkowników online, w tym zalogowanych: 0, gości: 1