通过signle slass管理不同的JavaFX阶段

时间:2016-12-16 15:27:35

标签: java javafx callback

我正在编写一个简单的JavaFX应用程序,该应用程序有三个阶段:sparse_matrix.values,注册(Login)和欢迎(Anmeldung)。 对不起德国人的呐喊!

我在Anwendung类中创建了每个舞台及其场景,并在App类中处理了事件,在fxml文件中创建了设计。我需要实现一个Controller类,该类必须管理MainAppLoginAnmeldung窗口之间的通信。

Anwendung应该首先启动MainApp窗口,然后如果选中该复选框,则会在那里通知Login,并命令启动MainApp窗口。注册成功后,Anmeldung应关闭MainApp窗口并再次显示Anmeldung窗口。在那里,当用户登录时,Login应该再次关闭MainApp窗口,并为Login窗口订购启动。

enter image description here

我已经完成了AnwendungLogin窗口之间的转换,修改了Anmeldung,这不应该在那里完成,必须通过{{1}完成}。

此外,任务只需要一个LoginController完成整个过程。

LoginController.java

MainApp

AnmeldungsController.java:

launch(args)

AnwendungsController.java:

package controller;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.stage.Modality;
import javafx.stage.Stage;
import resources.Benutzer;

public class LoginController {

  // private static MainApp mainApp;

  @FXML
  public TextField textFieldUserId;

  @FXML
  public PasswordField passwordFieldPasswort;

  @FXML
  public CheckBox checkBoxNeuAnmeldung;

  @FXML
  public Button buttonEinloggen;

  private boolean neuAnmeldung = false;

  // public void setCallBack(MainApp mainApp) {
  // LoginController.mainApp = mainApp;
  // }

  @FXML
  public void handleButtonEinloggenAction(ActionEvent event) throws Exception {
    // Stage stage = (Stage) buttonEinloggen.getScene().getWindow();
    if (neuAnmeldung == false) {
      Benutzer benutzer = new Benutzer(textFieldUserId.getText(),
          passwordFieldPasswort.getText());
      Parent anwendungsScene = FXMLLoader
          .load(getClass().getResource("/design/Anwendung.fxml"));
      Stage anwendungsStage = new Stage();
      ((Node) (event.getSource())).getScene().getWindow().hide();
      anwendungsStage.setScene(new Scene(anwendungsScene));
      anwendungsStage.setTitle("Anmeldung");
      anwendungsStage.show();
      System.out.println(benutzer);

    }

    // stage.close();
    System.out.println("Eingeloggt!");

  }

  @FXML
  public void handleCheckBoxNeuAnmeldungAction(ActionEvent event)
      throws Exception {
    if (checkBoxNeuAnmeldung.isSelected()) {
      neuAnmeldung = true;
      Parent anmeldungsScene = FXMLLoader
          .load(getClass().getResource("/design/Anmeldung.fxml"));
      Stage anmeldungsStage = new Stage();
      anmeldungsStage.initModality(Modality.WINDOW_MODAL);
      anmeldungsStage
          .initOwner(((Node) (event.getSource())).getScene().getWindow());
      anmeldungsStage.setScene(new Scene(anmeldungsScene));
      anmeldungsStage.setTitle("Anmeldung");
      anmeldungsStage.show();

    } else
      neuAnmeldung = false;
    System.out.println("Neu-Anmeldung? " + neuAnmeldung);

  }

}

MainApp.java:

package controller;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import resources.Benutzer;

public class AnmeldungsController {

  // private static MainApp mainApp;

  @FXML
  public TextField textFieldUserId;

  @FXML
  public PasswordField passwordFieldPasswort;

  @FXML
  public PasswordField passwordFieldWiederholung;

  @FXML
  public Button buttonAnmelden;

  // public void setCallBack(MainApp mainApp) {
  // AnmeldungsController.mainApp = mainApp;
  // }

  @FXML
  public void handleButtonAnmeldenAction(ActionEvent event) {
    Stage stage = (Stage) buttonAnmelden.getScene().getWindow();

    if (passwordFieldPasswort.getText()
        .equals(passwordFieldWiederholung.getText())) {
      Benutzer benutzer = new Benutzer(textFieldUserId.getText(),
          passwordFieldPasswort.getText());
      System.out.println(benutzer);
      System.out.println("Angemeldet!");
      stage.close();

    } else {
      textFieldUserId.setText("Passwörter stimmen nicht überein!");
      System.out.println("Passwörter stimmen nicht überein!");
      System.out.println(passwordFieldPasswort.getText() + " != "
          + passwordFieldWiederholung.getText());

    }

  }

}

当然,程序的其他方面,如例外和创建/阅读/删除用户等都超出了这个问题的范围!

1 个答案:

答案 0 :(得分:1)

这是让你开始的基本想法:

upper_bound()

现在可以在public class LoginController { private final ReadOnlyBooleanWrapper loggedIn = new ReadOnlyBooleanWrapper(); public ReadOnlyBooleanProperty loggedInProperty() { return loggedIn.getReadOnlyProperty() ; } public final boolean isLoggedIn() { return loggedInProperty().get(); } @FXML public TextField textFieldUserId; @FXML public PasswordField passwordFieldPasswort; @FXML public CheckBox checkBoxNeuAnmeldung; @FXML public Button buttonEinloggen; private boolean neuAnmeldung = false; @FXML public void handleButtonEinloggenAction(ActionEvent event) throws Exception { // assuming you verify the login credentials... loggedIn.set(true); System.out.println("Eingeloggt!"); } } 中执行:

MainApp