Как это сделать в JavaFX 8 ????Как заставить «PLEASE WAIT» появляться / показываться НЕМЕДЛЕННО (т.е. через <1 секунду), после того, как шоу выполнено ... не ждать, пока пользователь снова не получит контроль ввода - то есть, когда я хочу скрыть ожидание !!!!! </p>
Требуются: A) Окно / этап «Пожалуйста, подождите», которое PopsUp / показывает в приложении JavaFX 8 (в течение времени, когда пользователь не имеет элемента управления вводом, пока процессы выполняются в фоновом режиме.)
B) Это окно «Пожалуйста, подождите» выше, показано ... становится видимым и должно отображаться НЕМЕДЛЕННО при вызове, а не после выполнения следующего кода.
Что у меня работает: Часть А.Я могу показать и скрыть окно «Пожалуйста, подождите» / stage.
Проблема: Когда вызывается show (), это НЕ НЕМЕДЛЕННО.Фактически, даже несмотря на то, что вызовы Show выполняются ДО следующего выполнения кода с блокировкой потоков, всплывающее окно остается без изменений, пока пользователь не получит контроль над вводом (т. Е. После выполнения фонового кода и пользователь может нажимать кнопки на экране).Это сводит на нет всю цель всплывающего окна, которое состоит в том, чтобы уведомить пользователя о том, что он не пытается вводить данные, поскольку входы блокируются кодом, выполняющимся в фоновом режиме.Platform.runLater (() -> {функции вызваны} и 2) Скрытие / отображение других этапов, с показом фонового этапа или без него.
Методы, которые я уже пытался реализовать, ".show ()": всеСледующие ведут себя ЖЕ !!!!(они задерживаются до тех пор, пока Tread не станет свободным для ввода пользователем)
1) Простая метка и всплывающее окно:
// >>>>>> Popup WAIT Box: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
static Stage dialog_WAIT_Stage = new Stage();
//<Add above Instantiator AFTER LAYO values are set>
static MyDialog_WAIT dialog_WAIT;
static Label lblDisplayDialogWAIT_Msg;
static double popupWAIT_x, popupWAIT_y, popupWAIT_w, popupWAIT_h;
static Group grpRootMyDialog_WAIT;
static class MyDialog_WAIT extends Stage {
public MyDialog_WAIT (Stage owner, boolean modality, double lmwWidth, double lmwHeight) {
super();
initOwner(owner);
Modality m = modality ? Modality.APPLICATION_MODAL : Modality.NONE; //APPLICATION_MODAL
initModality(m);
setOpacity(.50); //.45; Keep lighter so User can Read Prompt while Waiting. .80
initStyle(StageStyle.TRANSPARENT);
popupWAIT_w = lmwWidth * .15;
popupWAIT_h = lmwHeight * .15 * (lmwWidth/lmwHeight); //Multiple by RatioFactor to get Square
popupWAIT_x = (lmwWidth - popupWAIT_w) * .5;
popupWAIT_y = (lmwHeight - popupWAIT_h) * .5;
setX(popupWAIT_x);
setY(popupWAIT_y);
grpRootMyDialog_WAIT = new Group();
Scene scene = new Scene(grpRootMyDialog_WAIT, popupWAIT_w+(popupWAIT_w*.2), popupWAIT_h+(popupWAIT_h*.2), Color.TRANSPARENT);
setScene(scene);
scene.setCursor(Cursor.WAIT);
//Message Label
lblDisplayDialogWAIT_Msg = new Label("Please\nWAIT...");
lblDisplayDialogWAIT_Msg.setFont(Font.font ("Calibri", FontWeight.BOLD, LAYO_Splashscreen_WIDTH * .067));//50
lblDisplayDialogWAIT_Msg.setBackground(new Background(new BackgroundFill(Color.YELLOW, new CornerRadii(115/*113*/), Insets.EMPTY)));
lblDisplayDialogWAIT_Msg.setPrefWidth(popupWAIT_w); //This Label is Entire PopupWindow
lblDisplayDialogWAIT_Msg.setPrefHeight(popupWAIT_h);
lblDisplayDialogWAIT_Msg.setAlignment(Pos.CENTER);
lblDisplayDialogWAIT_Msg.setPadding(new Insets(LAYO_Splashscreen_HEIGHT * .021, LAYO_Splashscreen_WIDTH * .020, LAYO_Splashscreen_HEIGHT * .021, LAYO_Splashscreen_WIDTH * .020)); //Insets(top, right, bottom, left)(10, 15, 10, 15)
//DropShadow Around Entire Window
DropShadow dropShadow = new DropShadow();
dropShadow.setOffsetX(LAYO_Splashscreen_WIDTH * .013);//10
dropShadow.setOffsetY(LAYO_Splashscreen_HEIGHT * .021);//10
dropShadow.setColor(Color.rgb(50, 50, 50, .588));
lblDisplayDialogWAIT_Msg.setEffect(dropShadow);
lblDisplayDialogWAIT_Msg.setCache(true); //debug: did not show
lblDisplayDialogWAIT_Msg.setVisible(true);
grpRootMyDialog_WAIT.getChildren().add(lblDisplayDialogWAIT_Msg);
grpRootMyDialog_WAIT.setVisible(true);
}
}
// <<<<<<< Popup WAIT Box: //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
2) Java Popup () объект:
// >>>>>>>> Popup() example-test >>>>>>>>>>>>
popup = new Popup();
popup.setAutoFix(true);
popup.setAutoHide(true);
popup.getContent().add(grpRootMyDialog_WAIT);
popup.show(stageSplashscreen, LAYO_Splashscreen_WIDTH * .75, LAYO_Splashscreen_HEIGHT * .6);
// <<<<<<<<<< Popup() example-test <<<<<<<<<<<<<<<<<<<<<<<<
3) Анимации по временной шкале Таймеры, устанавливаемые на 1 миллисекундный ответ.
-WorkerThread setDeamon (false) -WorkerThread setDeamon (true)
// >>>>>> PleaseWait Popup >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
static Timeline timelinePLEASE_WAIT_show, timelinePLEASE_WAIT_hide;
public void SetupPopup_PLEASE_WAIT() {
timelinePLEASE_WAIT_show = new Timeline(new KeyFrame(Duration.millis(1), ev -> {
timelinePLEASE_WAIT_hide.stop();
EmpathyPlay.dialog_WAIT.show();
}));
timelinePLEASE_WAIT_show.setCycleCount(1);
timelinePLEASE_WAIT_show.setCycleCount(1);
timelinePLEASE_WAIT_hide = new Timeline(new KeyFrame(Duration.millis(1), ev -> {
timelinePLEASE_WAIT_show.stop();
EmpathyPlay.dialog_WAIT.hide();
}));
timelinePLEASE_WAIT_hide.setCycleCount(1);
timelinePLEASE_WAIT_hide.setCycleCount(1);
}
4)
static class WorkerThread_show_play extends Thread {
public WorkerThread_show_play() {
//When false, (i.e. when it's a user thread),
//the Worker thread continues to run.
//When true, (i.e. when it's a daemon thread),
//the Worker thread terminates when the main
//thread terminates.
setDaemon(true);
this.setPriority(MAX_PRIORITY);
}
public void run() {
timelinePLEASE_WAIT_hide.stop();
timelinePLEASE_WAIT_show.play();
}
}
static class WorkerThread_hide_play extends Thread {
public WorkerThread_hide_play() {
//When false, (i.e. when it's a user thread),
//the Worker thread continues to run.
//When true, (i.e. when it's a daemon thread),
//the Worker thread terminates when the main
//thread terminates.
setDaemon(true);
this.setPriority(MAX_PRIORITY);
}
public void run() {
timelinePLEASE_WAIT_show.stop();
timelinePLEASE_WAIT_hide.play();
EmpathyPlay.dialog_WAIT.hide();
}
}
//<<<<<<< PleaseWait Popup <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<