Я пытаюсь разработать мобильное приложение на глюонном мобильном (eclipse plugin v2.6.0, MultiViewProject), контент не актуален. В основном, согласно документации по глюонам, я создал первый вид, который выглядит как экран входа в систему. Все было хорошо, но когда я попытался задействовать другое представление, вызываемое этим логином, это не сработало.
Я использовал метод switchView
, как я нашел в документации по глюону и здесь, в 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
построен аналогично классу StartView
, поэтому я думаю, что нет необходимости делиться им слишком, особенно потому, что этот код никогда не вызывается при запуске программы.
Заранее спасибо за любую помощь!
кстати: g.p(String, int)
только для отладки