Do not reuse dialog

This commit is contained in:
yushijinhun 2018-07-08 12:03:45 +08:00
parent b7a5a60091
commit 9bffc68c70
No known key found for this signature in database
GPG Key ID: 5BC167F73EA558E4

View File

@ -96,13 +96,14 @@ public final class Decorator extends StackPane implements TaskExecutorDialogWiza
private final boolean max, min; private final boolean max, min;
private final WizardController wizardController = new WizardController(this); private final WizardController wizardController = new WizardController(this);
private final Queue<Object> cancelQueue = new ConcurrentLinkedQueue<>(); private final Queue<Object> cancelQueue = new ConcurrentLinkedQueue<>();
private final JFXDialog dialog;
private double xOffset, yOffset, newX, newY, initX, initY; private double xOffset, yOffset, newX, newY, initX, initY;
private boolean allowMove, isDragging, maximized; private boolean allowMove, isDragging, maximized;
private BoundingBox originalBox, maximizedBox; private BoundingBox originalBox, maximizedBox;
private final TransitionHandler animationHandler; private final TransitionHandler animationHandler;
private final StackContainerPane dialogPane = new StackContainerPane();
private JFXDialog dialog;
private StackContainerPane dialogPane;
@FXML @FXML
private StackPane contentPlaceHolder; private StackPane contentPlaceHolder;
@ -181,12 +182,6 @@ public final class Decorator extends StackPane implements TaskExecutorDialogWiza
btnMax.fire(); btnMax.fire();
}); });
dialog = new JFXDialog();
dialog.setOverlayClose(false);
drawerWrapper.getChildren().add(0, dialog);
dialog.setDialogContainer(drawerWrapper);
dialog.setContent(dialogPane);
welcomeView.setCursor(Cursor.HAND); welcomeView.setCursor(Cursor.HAND);
welcomeView.setOnMouseClicked(e -> { welcomeView.setOnMouseClicked(e -> {
Timeline nowAnimation = new Timeline(); Timeline nowAnimation = new Timeline();
@ -572,13 +567,21 @@ public final class Decorator extends StackPane implements TaskExecutorDialogWiza
public void showDialog(Node node) { public void showDialog(Node node) {
FXUtils.checkFxUserThread(); FXUtils.checkFxUserThread();
if (dialog == null) {
dialog = new JFXDialog();
dialogPane = new StackContainerPane();
dialog.setContent(dialogPane);
dialog.setDialogContainer(drawerWrapper);
dialog.setOverlayClose(false);
dialog.show();
}
dialogPane.push(node);
EventHandler<DialogCloseEvent> handler = event -> closeDialog(node); EventHandler<DialogCloseEvent> handler = event -> closeDialog(node);
node.getProperties().put(PROPERTY_DIALOG_CLOSE_HANDLER, handler); node.getProperties().put(PROPERTY_DIALOG_CLOSE_HANDLER, handler);
node.addEventHandler(DialogCloseEvent.CLOSE, handler); node.addEventHandler(DialogCloseEvent.CLOSE, handler);
if (dialogPane.isEmpty())
dialog.show();
dialogPane.push(node);
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ -589,8 +592,11 @@ public final class Decorator extends StackPane implements TaskExecutorDialogWiza
.ifPresent(handler -> node.removeEventHandler(DialogCloseEvent.CLOSE, (EventHandler<DialogCloseEvent>) handler)); .ifPresent(handler -> node.removeEventHandler(DialogCloseEvent.CLOSE, (EventHandler<DialogCloseEvent>) handler));
dialogPane.pop(node); dialogPane.pop(node);
if (dialogPane.getChildren().isEmpty()) { if (dialogPane.getChildren().isEmpty()) {
dialog.close(); dialog.close();
dialog = null;
dialogPane = null;
} }
} }