2015-04-24 24 views
2

所以我用這個link來設置我的進度條,當我運行這段代碼時它工作得很好。ProgressBar不能用fxml文件和控制器

但是,使用我的設置,我似乎無法獲得進度條實際更新... progressBar.getProgress()實際上獲得了正確的進度,但UI未更新。這裏是到目前爲止的代碼:

Main.java

public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     try { 
      FXMLLoader loader = new FXMLLoader(Main.class.getResource("ProgressBarLayout.fxml")); 
      AnchorPane root = (AnchorPane) loader.load(); 
      Scene scene = new Scene(root); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

ProgressBarController.java

public class ProgressBarController { 
    private Task copyWorker; 

    @FXML 
    private ProgressBar progressBar; 

    @FXML 
    private void onButtonClick() { 
     progressBar = new ProgressBar(0); 
     progressBar.setProgress(0); 
     copyWorker = createWorker(); 

     progressBar.progressProperty().unbind(); 
     progressBar.progressProperty().bind(copyWorker.progressProperty()); 

     new Thread(copyWorker).start(); 
    } 


    public Task createWorker() { 
     return new Task() { 
      @Override 
      protected Object call() throws Exception { 
       for (int i = 0; i < 10; i++) { 
        Thread.sleep(2000); 
        updateMessage("2000 milliseconds"); 
        updateProgress(i + 1, 10); 

        System.out.println(progressBar.getProgress()); 
       } 
       return true; 
      } 
     }; 
    } 
} 

ProgressBarLayout.fxml

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.layout.AnchorPane?> 

<AnchorPane prefHeight="257.0" prefWidth="434.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.ProgressBarController"> 
    <children> 
     <ProgressBar fx:id="progressBar" layoutX="54.0" layoutY="103.0" prefHeight="51.0" prefWidth="326.0" progress="0.0" /> 
     <Button layoutX="201.0" layoutY="182.0" mnemonicParsing="false" onAction="#onButtonClick" text="OK" /> 
    </children> 
</AnchorPane> 

回答

5
在您的控制器

你這樣做:

progressBar = new ProgressBar(0); 

這意味着它將創建一個ProgressBar的新實例,並且它不再使用您的FXML中的progressBar。 只是刪除這條線,它應該工作

+0

就是這樣。哇。 – user1883614

+0

aww男人!保存了我的一天,我已經在網上搜索了幾個小時!多謝!! – drkthng

相關問題