更新JavaFX中的组件GUI

时间:2014-01-12 20:39:18

标签: java user-interface javafx

我需要从javafx中的句柄函数更新一些组件(标签,ProgressBar,按钮)。

该对话框是一个模态对话框,它用于按顺序执行某些操作。

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

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

问题是我的所有功能都已正确处理,但GUI上的元素没有改变。

修改

我尝试使用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 个答案:

答案 0 :(得分:1)

updateHandle是否在Event Thread上运行?我没有因为工具问题而烦恼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);
   });
}