我正在编写一个简单的JavaFX应用程序,该应用程序有三个阶段:sparse_matrix.values
,注册(Login
)和欢迎(Anmeldung
)。 对不起德国人的呐喊!
我在Anwendung
类中创建了每个舞台及其场景,并在App
类中处理了事件,在fxml文件中创建了设计。我需要实现一个Controller
类,该类必须管理MainApp
,Login
和Anmeldung
窗口之间的通信。
Anwendung
应该首先启动MainApp
窗口,然后如果选中该复选框,则会在那里通知Login
,并命令启动MainApp
窗口。注册成功后,Anmeldung
应关闭MainApp
窗口并再次显示Anmeldung
窗口。在那里,当用户登录时,Login
应该再次关闭MainApp
窗口,并为Login
窗口订购启动。
我已经完成了Anwendung
和Login
窗口之间的转换,修改了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());
}
}
}
当然,程序的其他方面,如例外和创建/阅读/删除用户等都超出了这个问题的范围!
答案 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