从Java中的方法切换场景

时间:2019-04-28 04:31:24

标签: java javafx

我正在尝试以最有效的方式使用SceneBuilder切换场景,并且我注意到针对此特定实例并没有很多回答的问题。出于某种原因,当我尝试运行此代码序列时,我会遇到很长的错误:(此外,如果它有助于理解我在做什么,那么这是一种相当简单的照片加密设备,可以对密码进行加密,添加盐并存储其哈希值位于文本文件中)

    Parent parent = FXMLLoader.load(getClass().getResource("password.fxml"));
    Scene enterpasswordscene = new Scene(parent);
    Stage window = (Stage) ((Node)event.getSource()).getScene().getWindow();
    window.setScene(enterpasswordscene);
    window.show();

相反,我决定使onStart类成为切换场景的方法持有者。在控制器类内部,我调用方法:onstart.showpasswordprompt();,该方法如下所示:

public void showpasswordprompt() throws IOException(Inside Onstart Class){
    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(OnStart.class.getResource("password.fxml"));
    mainLayout = loader.load();
    Scene scene = new Scene(mainLayout);
    stage.setScene(scene);
    stage.show();
}

但是,每当我调用该方法时都会出现此错误,它看起来像这样:

Screenshot of the error

Screenshot of the error 2

似乎FXML就是问题所在(第17行),但是错误指出“没有为顶层元素指定控制器”。尽管这很不寻常,因为在按下按钮时,我为按钮的OnAction方法指定了一个方法。方法如下:

@FXML 
private void Createpassword(ActionEvent event) throws IOException {
  passwordPlainText = passwordtextbox.getText();
  System.out.println(passwordPlainText);
  BufferedImage image = ImageIO.read(f);
  // doAESEncryption(passwordPlainText);
}

这是FXML(仅兴趣线):

  <TextField fx:id="passwordtextbox" layoutX="251.0" layoutY="184.0" promptText="Password" />
  <Button fx:id="passwordenter" layoutX="438.0" layoutY="184.0" mnemonicParsing="false" onAction="#Createpassword" prefHeight="25.0" prefWidth="101.0" text="Enter" />

FXML的#Createpassword部分以红色突出显示,但实际上我在主控制器类中创建了该方法。我的猜测是未调用#Createpassword方法的原因是因为代码正在OnStart类而不是maincontroller方法中寻找该方法。但是,我认为不是这种情况,因为在maincontroller类中加载新场景也不起作用。有人可以告诉我为什么这不起作用吗?

0 个答案:

没有答案