2014-01-12 3 views
0

Мне нужно обновить некоторые компоненты (Ярлыки, ProgressBar, button) из функции handle в javafx.Обновление компонентов GUI в JavaFX

Диалог - это модальное диалоговое окно, которое используется для последовательного выполнения некоторых операций.

@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(); 

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

Проблема в том, что все мои функции правильно обработаны, но элементы в графическом интерфейсе не изменились.

EDIT

Я пытался использовать Platform.runlater, но это, кажется, не работает ...

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); 
      } 
     }); 
} 

ответ

1

ли updateHandle работает на тему событий? Я не беспокоился об FXML из-за проблем с инструментами, поэтому это не очень большой ответ. (Но, надеюсь, это помогает!)

//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); 
    }); 
} 
Смежные вопросы