我正在一个netbeansIDE javaFXML项目上,当我使用用户名和密码登录到第二个屏幕时,我希望禁用第二个屏幕按钮。我试图通过使用Getter来禁用其他控制器中的按钮,但是登录后什么也没有发生。 我真的希望有什么可以帮助的,我尝试搜索帮助,找到了一些,并尝试了但最终却被我困住了。
这是我的代码:
{@FXML
private void handleLogin(ActionEvent event) throws IOException {
String username = txtUsername.getText();
String password = txtPassword.getText();
Button pressed_button = (Button) event.getSource();
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("Screen3_Scada.fxml"));
loader.load();
if(pressed_button==btnscadalogin){
if (loginLoad.validateSCADA(username, password)) {
try {
AnchorPane pane = FXMLLoader.load(getClass().getResource("Screen3_Scada.fxml"));
RootPane.getChildren().setAll(pane);
Screen3_Scada_Controller getbtnPLC = loader.getController();
getbtnPLC.getBtngotoPLC().setDisable(true);
}catch (IOException ex) {
System.err.println("Error in method GotoScreen2 class FXML_Screen1_loginController");
}
}else{
System.err.println("Error, wrong username or password");
}
}
}}
答案 0 :(得分:0)
您两次加载场景:
loader.load();
...
AnchorPane pane = FXMLLoader.load(getClass().getResource("Screen3_Scada.fxml"));
getbtnPLC
不是在加载添加到现有场景中的场景时创建的控制器实例。
您应该使用loader.load();
调用的结果:
if (pressed_button == btnscadalogin) {
if (loginLoad.validateSCADA(username, password)) {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("Screen3_Scada.fxml"));
try {
AnchorPane pane = loader.load();
RootPane.getChildren().setAll(pane);
Screen3_Scada_Controller getbtnPLC = loader.getController();
getbtnPLC.getBtngotoPLC().setDisable(true);
} catch (IOException ex) {
System.err.println("Error in method GotoScreen2 class FXML_Screen1_loginController");
}
}
我确实建议使用不同的方法来处理来自不同来源的ActionEvent
。通常,这比检查多个节点中的哪一个是事件的源头更好。