Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to change the display of the page #87

Open
726903782 opened this issue Aug 7, 2019 · 1 comment
Open

How to change the display of the page #87

726903782 opened this issue Aug 7, 2019 · 1 comment

Comments

@726903782
Copy link


1、
JavaFXApplication.showView(TagInfoDialog.class, Modality.APPLICATION_MODAL);

2、
@FXMLController
public class TagInfoController implements Initializable {
public void initialize(URL location, ResourceBundle resources) {
Platform.runLater(() -> {

    String protocol = CommonSession.Session_Protocol;
    switch (protocol) {
        case "DL/T 645":
            Label lblParam1_dlt645 = new Label("数据项名称:");
            this.hbxRow2.getChildren().add(lblParam1_dlt645);
            break;
        case "CJ/T 188":
            Label lblParam1_cjt188 = new Label("厂商代码:");
            this.hbxRow2.getChildren().add(lblParam1_cjt188);
			TextField txtParam1_cjt188 = new TextField();
            this.hbxRow2.getChildren().add(txtParam1_cjt188);
            break;
    }
    });
}

}

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

@Cyanss
Copy link

Cyanss commented Jul 23, 2020

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants