JavaFx无法将文本强制转换为文本字段,也无法将文本字段强制转换为文本?
我正在尝试为我的Java类做一个应用程序。我们主要是在学习如何使用github,但我的问题来自JavaFX。我假设在几个窗格和场景上创建一个表单,在最后一个窗格和场景上,当用户点击submit时,TextFields内容应该放在一个文件中 我的想法是将文本字段传递到最后一个有参数的窗格中,并在按下submit按钮后创建一个bufferedwriter,将所有文本添加到一个新文件中。因此,这个想法非常有效,我通过了一个窗格,因为所有文本字段都在一个VBox中,当我编写它们时,我将它们转换为文本字段,但当我运行它时,它告诉我文本不能转换为文本字段,所以当我尝试转换为文本时,它会告诉我相反的结果!该文本字段不能转换为文本!我用代码中的textArea尝试了缓冲区,效果很好!我不明白为什么不使用我经过的窗格 注意:就在最后,我尝试连接到一个字符串,看看缓冲区是否有问题,但它告诉我同样的错误,即使这样做 代码如下:JavaFx无法将文本强制转换为文本字段,也无法将文本字段强制转换为文本?,java,javafx,casting,Java,Javafx,Casting,我正在尝试为我的Java类做一个应用程序。我们主要是在学习如何使用github,但我的问题来自JavaFX。我假设在几个窗格和场景上创建一个表单,在最后一个窗格和场景上,当用户点击submit时,TextFields内容应该放在一个文件中 我的想法是将文本字段传递到最后一个有参数的窗格中,并在按下submit按钮后创建一个bufferedwriter,将所有文本添加到一个新文件中。因此,这个想法非常有效,我通过了一个窗格,因为所有文本字段都在一个VBox中,当我编写它们时,我将它们转换为文本字段
public class RulesPane extends VBox{
public RulesPane(Stage mainStage, Scene mainScene, Pane pane) {
this.setAlignment(Pos.TOP_CENTER);
BackgroundImage background = new BackgroundImage(new Image("water.png",900,600,false,true),
BackgroundRepeat.REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT,
BackgroundSize.DEFAULT);
this.setBackground(new Background(background));
File logoPath = new File("src/swimclub_Logo.png");
Image logoImage = new Image(logoPath.toURI().toString());
ImageView logo = new ImageView(logoImage);
TextArea agreement = new TextArea();
agreement.setEditable(false);
agreement.setPrefHeight(400);
agreement.setMaxWidth(600);
agreement.setWrapText(true);
agreement.setText("This is text");
CheckBox agree = new CheckBox("I Agree");
HBox buttons = new HBox();
buttons.setPadding(new Insets(50, 0, 0, 60));
buttons.setSpacing(300);
Button back = new Button();
back.setText("Back");
back.setOnMouseClicked(e->{
mainStage.setScene(mainScene);
});
Button exit = new Button();
exit.setText("Exit");
exit.setOnMouseClicked(e->{
Platform.exit();
});
Button submit = new Button();
submit.setText("Submit Form");
submit.setDisable(true);
submit.setOnMouseClicked(e->{
File file = new File("user_info.txt");
try {
BufferedWriter out = new BufferedWriter(new FileWriter(file));
String contentToSave = "";
for(int i = 0; i < pane.getChildren().size(); i++)
contentToSave += ( (TextField) pane.getChildren().get(i)).getText();
out.write(contentToSave);
out.flush();
out.close();
} catch (IOException e1) {
e1.printStackTrace();
}
});
//CheckBox event handler to make the submit button available or unavailable when pressed
agree.setOnAction(e->{
if(agree.isSelected())
submit.setDisable(false);
else
submit.setDisable(true);
});
buttons.getChildren().addAll(back, exit, submit);
this.getChildren().addAll(logo , agreement, agree, buttons);
}
}
因为我看不到窗格的确切来源,所以我假设当你说在VBox中有文本字段时,VBox就在该窗格中。如果是这样,问题看起来像是您将文本字段强制转换为窗格,而不是将文本字段强制转换为窗格的子项,如果它位于VBox中,您无论如何都希望得到它的(VBox)子项。因此:
for (int i = 0; i < pane.getChildren().size(); i++) {
Node child1 = group.getChildren().get(i);
if (child1 instanceof VBox) {
for(Node child2:((VBox) child1).getChildren()) {
if (child2 instanceof TextField) {
contentToSave += (TextField) child2.getText();
}
}
}
}
for(int i=0;i
与尝试将窗格变成文本字段的try块中的for循环不同,这将获取窗格的子项,假设它们是vbox(如果是),然后获取vbox的子项,并假设它们是TextFields(如果是)
如果这还不行,我建议发布您的其余代码(窗格来自何处)以及它抛出的错误。让我澄清一下:您将整个文本字段写入一个文本文件?那可不行。只在这样的任务中使用字段的文本。是的,这是我使用getText()方法的方式,这样我就可以在内部使用文本,但它会给我带来错误请使用一个最小的可运行程序,我们可以自己尝试,而不丢失方法或自定义类,不仅上面的代码是不完整的,而且您还有一些错误,比如您使用参数(Stage、Scene、String)调用的构造函数或rulespan,它的定义是(Stage、Scene、Pane),此外,我不知道RulesScene是关于什么的。试着用一个小例子来重现您的问题,这样做时,您可能会发现错误的类型。您说您的
TextField
s位于VBox
中,但您有(TextField)窗格…
?显示您的堆栈跟踪
,并指出引发错误的代码行。我传递的是一个VBox窗格。其余的代码是不需要的,因为我尝试在类中执行它,其中VBox和TextFields被实例化只是为了测试目的,它抛出了相同的错误。不是说你应该把它放在代码的其他部分,以便理解这里发生了什么(你试图使用的窗格中是什么)看看它来自哪里会很有帮助。好吧,我添加了它的字符串contentToSave=“”;和新规则(初级阶段、场景、内容保存);,您正在尝试使用字符串而不是窗格创建RulesPane(舞台、场景、窗格)。将构造函数更改为具有字符串,或者尝试改用字符串[],因为您正在存储多个字符串
for (int i = 0; i < pane.getChildren().size(); i++) {
Node child1 = group.getChildren().get(i);
if (child1 instanceof VBox) {
for(Node child2:((VBox) child1).getChildren()) {
if (child2 instanceof TextField) {
contentToSave += (TextField) child2.getText();
}
}
}
}