Как да промените ProgressIndicator на икона при достигане на определено условие с javafx

Имам отделен клас, който инициализира куп индикатор за напредък за моя GUI

public class ProgressIndicators {
    private ProgressIndicator firstIndicator;
    private ProgressIndicator secondIndicator;
    private ProgressIndicator thirdIndicator;

    public void initalizeIndicators() {

        //Initialize indicators and set properties
    

    }

}

Имам друг клас, който извършва някои тежки бекенд изчисления в друг клас

public class HeavyCalculations {

    private boolean isFinished;

    public HeavyCalculations() {
        isFinished = false;
        doHeavyCalculations()
    }

    public doHeavyCalculations() {
        // Do Heavy Calculations that may take up to ten minutes
        isFinished = true; // Set isFinished to true once heavy calculations are done
    }

}

След като променливата isFinished е зададена на true, бих искал да премахна една от ProgressIndicator и да я променя на друга икона. Как бих постигнал това?


person AJ Goudel    schedule 25.12.2020    source източник
comment
Индикаторът за напредък актуализира ли се въз основа на „тежките изчисления“? Трябва ли индикаторът за напредък да се промени на нещо друго, когато достигне 100%?   -  person swpalmer    schedule 26.12.2020


Отговори (1)


Е, знаете, че ако достигне, този ред е завършен, така че вие ​​контролирате, без да е необходимо да споделяте флаг.

public doHeavyCalculations() {
    isFinished = true;
    removeProgressIndicator(); 
}

Просто приложете логиката, от която се нуждаете, за да знаете кой ProgressIndicator искате да премахнете и как да го премахнете в метода removeProgressIndicator().

Ако класът HeavyCalculations притежава екземпляр на ProgressIndicators, той може да бъде имплементиран в този клас. Или без нужда от екземпляр, чрез извикване на статичен метод.

Например, използвайки екземпляр и с параметър int id:

public doHeavyCalculations() {
    isFinished = true;
    indicatorInstance.removeProgressIndicator(1); 
}

.

public class ProgressIndicators {
   private ProgressIndicator firstIndicator;
   private ProgressIndicator secondIndicator;
   private ProgressIndicator thirdIndicator;

   public void removeProgressIndicator(int id) {
      //remove logic
   }
 }

Бих предложил да съхранявате Indicators в списък, за да можете лесно да ги извличате/добавяте/премахвате.

person aran    schedule 25.12.2020
comment
А, благодаря ти, мислех си, че трябва да внедря observable, но това работи и е много просто - person AJ Goudel; 26.12.2020