英文:
Loading a different Scene if some buttons are checked
问题
以下是您提供的内容的翻译:
// 当“Enter”按钮被点击时触发的方法
@FXML
private void onActionBtnEnter(ActionEvent event) {
try {
if (txtUser.getText() == null || txtUser.getText().isEmpty()) {
new Message().showModal(Alert.AlertType.ERROR, "用户验证",
(Stage) btnEnter.getScene().getWindow(), "需要用户名");
} else if (txtPass.getText() == null || txtPass.getText().isEmpty()) {
new Message().showModal(Alert.AlertType.ERROR, "密码验证",
(Stage) btnEnter.getScene().getWindow(), "需要密码");
} else {
FlowController.getInstance().goMain(); // 加载一个名为goMain()的FXML视图
((Stage) btnEnter.getScene().getWindow()).close(); // 关闭登录窗口并加载新场景
}
} catch (Exception ex) {
Logger.getLogger(LandingViewController.class.getName()).log(Level.SEVERE, "登录错误。", ex);
}
}
// 当"学生"按钮被点击时触发的方法
@FXML
private void onActionBtnStd(ActionEvent event) {
btnStd.setDisable(true);
txtPass.setDisable(false);
txtUser.setDisable(false);
}
// 当"教授"按钮被点击时触发的方法
@FXML
private void onActionBtnProf(ActionEvent event) {
btnProf.setDisable(true);
txtPass.setDisable(false);
txtUser.setDisable(false);
}
// 当"Enter"按钮被点击时触发的方法
@FXML
private void onActionBtnEnter(ActionEvent event) {
if (btnStd.isDisabled()) { // 如果"学生"按钮被禁用
FlowController.getInstance().goMain(); // 加载一个名为goMain()的FXML视图
((Stage) btnEnter.getScene().getWindow()).close(); // 关闭登录窗口并加载新场景
} else if (btnProf.isDisabled()) { // 如果"教授"按钮被禁用
FlowController.getInstance().goMain2(); // 加载一个名为goMain2()的FXML视图
((Stage) btnEnter.getScene().getWindow()).close(); // 关闭登录窗口并加载新场景
} else if (btnProf.isDisabled() && btnStd.isDisabled()) { // 如果"教授"和"学生"按钮都被禁用
FlowController.getInstance().goMain3(); // 加载一个名为goMain3()的FXML视图
((Stage) btnEnter.getScene().getWindow()).close(); // 关闭登录窗口并加载新场景
}
}
请注意,这里提供的是您所需的代码翻译部分,用于加载不同的FXML视图和执行相关操作。如果您有任何其他问题或需要进一步帮助,请随时提问。
英文:
So I'm trying to load three specific scenes if some buttons are clicked. It is a simple loading screen that calls three other scenes which has 2 textfields(txtUser,txtPass) and 2 buttons (btnCancel, btnEnter) and 2 selecting buttons (btnStd, btnProf) which loads a fxml separately - a third fxml if both are clicked disabled
The tricky part is in this Enter button which is called after enabled or disabling two other buttons, for students and teachers. This also loads a third if both buttons are pressed: the administrator
@FXML
private void onActionBtnEnter(ActionEvent event) {
try {
if (txtUser.getText() == null || txtUser.getText().isEmpty()) {
new Message().showModal(Alert.AlertType.ERROR, "User validation",
(Stage) btnEntrar.getScene().getWindow(),"Needs username");}
else if (txtPass.getText() == null || txtPass.getText().isEmpty()) {
new Message().showModal(Alert.AlertType.ERROR, "Password validation",
(Stage) btnEntrar.getScene().getWindow(), "Needs password");}
else {
FlowController.getInstance().goMain(); //this is one of the fxlm views to load
((Stage) btnEnter.getScene().getWindow()).close(); //closes the login and loads the scene
}
}
catch (Exception ex) {
Logger.getLogger(LandingViewController.class.getName()).log(Level.SEVERE, "Login error.", ex);
}
}
This works alright but instead of choosing specific fxml to load it only loads goMain() which contains administratorview.fxml. I also did a goMain2() and goMain3().
For students, the studentsview.fxml should load. For profesors the profesorview.fxml. Following code for buttons methods and actions
@FXML
private void onActionBtnStd(ActionEvent event) {
btnStd.setDisable(true);
txtPass.setDisable(false);
txtUser.setDisable(false);
}
@FXML
private void onActionBtnProf(ActionEvent event) {
btnProf.setDisable(true);
txtPass.setDisable(false);
txtUser.setDisable(false);
}
So far good, but loads only a single fxml because they aren't called yet. So I guess in the btnEnter action there should be some code which I tried as in (same event as above):
@FXML
private void onActionBtnEntrar(ActionEvent event) {
else if (btnStd.getValue().isDisabled()){ //added else if but I don't know how to call a boolean property in a void
FlowController.getInstance().goMain();
((Stage) btnEnter.getScene().getWindow()).close();}
else if (btnProf.getValue().isDisabled()){
FlowController.getInstance().goMain2();
((Stage) btnEnter.getScene().getWindow()).close();}
else if (btnProf.getValue().isDisabled() && btnStd.getValue().isDisabled()){
FlowController.getInstance().goMain3();
((Stage) btnEnter.getScene().getWindow()).close();}
答案1
得分: 0
傻我了,在if语句中我添加了.getValue() - 所需的只是放置component.isDisabled()或.isEnabled()(如果它保存了布尔值)。然而,如果两者都被禁用,它不会加载adminview,而是会加载studentview。进一步调查...
编辑:好的,最后一个“else if”必须比另外两个先被调用。这样做运行得很好。
英文:
Silly me, I added .getValue() in the if statement - all it was needed is to put the component.isDisabled() or .isEnabled() if it holds a boolean. However it doesn't load the adminview if both are checked disabled - it load the studentview. Investigating further...
Edit: Ok the last "else if" must be called first than the other two. It works like a charm.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论