Danilo
Danilo

Reputation: 2036

Update components GUI in JavaFX

I need to update some components (Labels, ProgressBar, button) from an handle function in javafx.

The dialog is a modal dialog and it's used to perform sequentially some operations.

@FXML public void updateHandle(ActionEvent action){

    buttonSend.setDisable(true);

    /* Operation 1 */ 
    progressBar.setProgress(0.05);
    label.setText("Init..");

    myInitFunction();
    myVar = new var(); //global


    /* Op2 */
    progressBar.setProgress(0.10);
    label.setText("Check connection..");

    myConnFunction();

    // ....
    // ....
}

The problem is that all my functions are correctly processed, but the elements on the GUI didn't change.

EDIT

I tried to use Platform.runlater but it seems to don't work...

void updateLabelLater(final Label label, final String text) {
        Platform.runLater(new Runnable() {
          @Override public void run() {
            label.setGraphic(null);
            label.setText(text);
          }
        });
    }
void updateProgressBar(final ProgressBar progressBar, final double val){
    Platform.runLater(new Runnable() {
          @Override public void run() {
            progressBar.setProgress(val);
          }
        });
}

Upvotes: 0

Views: 1724

Answers (1)

Daniel B. Chapman
Daniel B. Chapman

Reputation: 4687

Is updateHandle running on the Event Thread? I didn't bother with FXML because of tooling issues so this isn't much of an answer. (But hopefully it helps!)

//Pseudo Code
public doLongRuningOperation(final Object ... objects){
  final Thread longRunning = new Thread(){
    public void run(){
       update("this");
       sleep(1000); //Pause/do something etc...
       update("should");
       sleep(1000);
       update("update");
       System.err.println("completed");
    }
  };
  longRunning.start(); //Start this process
}
//Rejoin the UI Thread and update it...
public void update(final String text){
   //reference to label 'lbl'
   Platform.runLater(new Runnable(){
     lbl.setText(text);
   });
}

Upvotes: 2

Related Questions