无法在gluon mobile上切换视图

时间:2019-01-16 20:49:26

标签: javafx gluon-mobile

我正在尝试使用gluon mobile(eclipse插件v2.6.0,MultiViewProject)开发移动应用程序,内容无关。通常,根据gluon文档,我创建了第一个视图,它似乎是登录屏幕。一切都很好,但是当我尝试使用此登录视图所调用的另一个视图时,它将不起作用。

我使用了switchView方法,如在gluon文档和此处的stackoverflow中所发现的那样。根据这些消息来源,我的《准则》应该起作用,但不起作用。也许我在其余的代码中犯了另一个错误?

“主要”类(导入和包声明除外):

public class GluonApplication extends MobileApplication {
    public static final String START_VIEW = HOME_VIEW; 
    public static final String LOGIN_VIEW = "Login View"; //new home
    public static final String REG_VIEW = "Reg View";

    public General g = new General();

    @Override
    public void init() {
        g.p("init", 2);
        StartView home = new StartView();
        addViewFactory(START_VIEW, () -> home);
        addViewFactory(LOGIN_VIEW, () -> new LoginView());
        addViewFactory(REG_VIEW, () -> new RegView());

        DrawerManager.buildDrawer(this);
    }

    @Override
    public void postInit(Scene scene) {
        Swatch.GREY.assignTo(scene);

        scene.getStylesheets().add(GluonApplication.class.getResource("style.css").toExternalForm());
        ((Stage) scene.getWindow()).getIcons().add(new Image(GluonApplication.class.getResourceAsStream("/icon_kT_icon.png")));
    }

StartView,其中包括登录视图:

public class StartView extends View {

    public General g = new General();

    public StartView() {
        g.p("set HomeView",2);
        getStylesheets().add(StartView.class.getResource("start.css").toExternalForm());

        LoginSpace lspace = new LoginSpace();
        setCenter(lspace);
    }

    @Override
    protected void updateAppBar(AppBar appBar) {
        appBar.setNavIcon(MaterialDesignIcon.MENU.button(e -> getApplication().getDrawer().open()));
        appBar.setTitleText("Login");
        appBar.setDisable(true);
        appBar.setVisible(false);
    }

    class LoginSpace extends VBox {

        TextField name;
        TextField pass;

        public LoginSpace() {
            g.p("set LoginSpace",2);

            HBox h = new HBox(10.0);
            name = new TextField();
            pass = new TextField();
            Button login = new Button("Anmelden");
            Button reg = new Button("Neu registrieren");

            name.setFloatText("Nutzername");
            pass.setFloatText("Passwort:");
            login.setOnAction(e -> onLogin());
            reg.setOnAction(e -> onReg());

            h.getChildren().addAll(login, reg);
            h.setAlignment(Pos.CENTER);
            getChildren().addAll(name, pass, h);
            KopfrechenTrainer.initKT();

            setSpacing(25);
            setAlignment(Pos.CENTER);
            Insets pad = new Insets(20,50,20,50);
            setPadding(pad);
        }

        private void onLogin() {
            g.p("button_login pressed",2);
            String name = this.name.getText();
            String pass = this.pass.getText();
            boolean logIn = KopfrechenTrainer.checkLogin(name, pass);
            if (logIn) ;//HomeView aufrufen, Wenn nicht errormeldung
            else { 
                Alert fault = new Alert(AlertType.NONE, "Nutzername oder Passwort ist nicht korrekt. " + 
                        "Bitte versuche es erneut oder registriere dich neu.");
                fault.showAndWait();
            }

        }

        private void onReg() {
            g.p("button_reg pressed", 2);
            MobileApplication.getInstance().switchView("REG_VIEW");
        }
    }
}

如果我做对了,最后的代码行应将视图切换到REG_VIEW类中也定义的视图。 GluonApplication类的构建与类RegView相似,因此我认为不必共享,尤其是因为在运行程序时永远不会调用此代码。

在此先感谢您的帮助!

btw:StartView仅用于调试

0 个答案:

没有答案