[英]javafx db load progress indicator
private Popup popupProgressIndicator;
public void showProgressIndicator(ScreensController myController) {
if (popupProgressIndicator == null) {
ProgressIndicator indicator = new ProgressIndicator(-1.0);
indicator.setPrefHeight(200);
indicator.setPrefWidth(200);
indicator.setLayoutX(0);
indicator.setLayoutY(0);
popupProgressIndicator = new Popup();
popupProgressIndicator.getContent().add(indicator);
}
if (!popupProgressIndicator.isShowing()) {
popupProgressIndicator.show(primaryStage);
popupProgressIndicator.centerOnScreen();
}
myController.setDisable(true);
}
public void hideProgressIndicator(ScreensController myController) {
if (popupProgressIndicator.isShowing())
popupProgressIndicator.hide();
myController.setDisable(false);
}
嗨,我正在使用上面的代碼在javafx應用程序中創建進度指示器。 我想在從db加載數據或將數據保存到db時顯示進度指示器。
@FXML
private void addDesignationSelect() {
showProgressIndicator(myController);
Task<Void> task = new Task<Void>() {
@Override
protected Void call() throws Exception {
Platform.runLater(new Runnable() {
@Override
public void run() {
// doing some heavy db process
}
});
return null;
}
@Override
protected void succeeded() {
hideProgressIndicator(myController);
}
@Override
protected void failed() {
super.failed();
hideProgressIndicator(myController);
}
};
new Thread(task).start();
}
我已使用“任務”加載進度條,但未顯示進度條。 我做錯了什么?
在啟動線程/任務之前,請調用show方法showProgressIndicator
。 這就是為什么您的窗口不顯示(或顯示時間很短)的原因
您可以在myController.setDisable(true);
之后打開progressBar myController.setDisable(true);
,您可以等待任務返回特定值(例如,使用Task<Boolean>
)。
isDone()
方法將告訴您任務何時結束以及何時調用hideProgressIndicator
。
另一個選擇是從您的Task本身進行UI修改,請參見此處的示例Task
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.