Open 726903782 opened 5 years ago
Here is my temporary solution:
Step 1:
Use JFxFxmlView
class replace zhe AbstractFxmlView
class
public class JFxFxmlView extends AbstractFxmlView {
private String value;
private String[] css;
private String bundle;
private String encoding;
private String title;
private StageStyle stageStyle;
private final FXMLView annotation = getFXMLAnnotation();
public JFxFxmlView () {
super();
this.value = this.annotation.value();
this.css = this.annotation.css();
this.bundle = this.annotation.bundle();
this.encoding = this.annotation.encoding();
this.title = this.annotation.title();
String style = this.annotation.stageStyle();
this.stageStyle = StageStyle.valueOf(style.toUpperCase());
}
private FXMLView getFXMLAnnotation() {
Class<? extends AbstractFxmlView> clazz = this.getClass();
FXMLView annotation = clazz.getAnnotation(FXMLView.class);
return annotation;
}
...
...
// getter and setter
Step 2:
Use JFxToolViewManager
class realization AbstractJavaFxApplicationSupport
class
public class JFxToolViewManager extends AbstractJavaFxApplicationSupport implements InitializingBean {
@Autowired
private GxAccountService accountService;
private static ConfigurableApplicationContext APPLICATION_CONTEXT;
public static Scene SCENE;
public static Stage PRIMARY_STAGE;
public static JFxToolViewManager INSTANCE;
@Override
public void afterPropertiesSet() {
INSTANCE = this;
}
@Override
public void beforeInitialView(Stage stage, ConfigurableApplicationContext ctx) {
super.beforeInitialView(stage, ctx);
APPLICATION_CONTEXT = ctx;
PRIMARY_STAGE = stage;
//TODO something...
}
public static void show(Class<? extends JFxFxmlView> window, Modality mode) {
JFxFxmlView view = APPLICATION_CONTEXT.getBean(window);
PRIMARY_STAGE = new Stage();
if (view.getView().getScene() != null) {
SCENE = view.getView().getScene();
} else {
SCENE = new Scene(view.getView());
}
PRIMARY_STAGE.setScene(SCENE);
PRIMARY_STAGE.initModality(mode);
PRIMARY_STAGE.initOwner(getStage());
PRIMARY_STAGE.setTitle(view.getTitle());
PRIMARY_STAGE.initStyle(view.getStageStyle());
PRIMARY_STAGE.showAndWait();
}
public static void show(Class<? extends JFxFxmlView> window) {
JFxFxmlView view = APPLICATION_CONTEXT.getBean(window);
if (GUIState.getScene() == null) {
SCENE = new Scene(view.getView());
GUIState.setScene(SCENE);
}
showView(window);
}
public static void launch(String[] args) {
launch(JFxToolViewManager.class, JFxToolMainView.class, new JFxSplashView(), args);
}
...
...
Step 3 :
Use JFxToolViewManager .show(param , param )
or JFxToolViewManager .show(param )
,If you want to close zhe current
Stage
, you can use JFxToolViewManager .PRIMARY_STAGE.close()
.
Attention, it's only temporary.
1、 JavaFXApplication.showView(TagInfoDialog.class, Modality.APPLICATION_MODAL);
2、 @FXMLController public class TagInfoController implements Initializable { public void initialize(URL location, ResourceBundle resources) { Platform.runLater(() -> {
}
Like the code above, I need to change the display of the page when protocol is a different value. But the initialize method of the above code is only executed once (because it is hidden when the page is closed), and it is not executed again when the protocol value changes. How to change the display of the page