在 FXML 中创建文件选择器
Create FileChooser in FXML
我正在尝试在 fxml 文件中创建一个 fileChooser。我的代码如下所示:
<HBox alignment="CENTER">
<Label text="Tower 1 Image" />
<TextField fx:id="tower1ImageField" />
<FileChooser fx:id ="tower1FileChooser" />
</HBox>
控制器的内容如下:
public class HudBuilderController{
@FXML TextField tower1ImageField;
@FXML FileChooser tower1FileChooser;
File towerFile;
@FXML TextField tower2ImageField;
@FXML FileChooser tower2FileChooser;
}
但是,我收到一个我不明白的错误:
Caused by: java.lang.IllegalArgumentException: Unable to coerce javafx.stage.FileChooser@5e85f35 to class javafx.scene.Node.
at com.sun.javafx.fxml.BeanAdapter.coerce(Unknown Source)
at javafx.fxml.FXMLLoader$Element.add(Unknown Source)
at javafx.fxml.FXMLLoader$ValueElement.processEndElement(Unknown Source)
at javafx.fxml.FXMLLoader.processEndElement(Unknown Source)
... 26 more
我已经尝试在控制器中实例化 FileChooser,但我认为我需要向 fxml 文件添加更多内容。有什么帮助吗?谢谢!
FileChooser
不是从 Node
延伸而来,因此您不能在 FXML
中使用它。不要忘记 FXML 只是您的用户界面的表示。无需将要在控制器中使用的所有组件添加到 FXML
.
你只需要在你的控制器中初始化一个FileChooser
:
FileChooser fileChooser = new FileChooser();
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
fileChooser.getExtensionFilters().add(extFilter);
File file = fileChooser.showOpenDialog(primaryStage);
System.out.println(file);
JavaFX 8 API Reference: FileChooser
最后 FileChooser
是一个在您的屏幕上打开的对话框。不确定为什么要将它包含在 FXML 中?只需在您的代码中使用它并使用您获得的文件路径即可。
HBox默认的属性是children
,是一个节点列表。由于FileChooser不是一个Node,所以不能添加到HBox的子节点列表中。
我正在尝试在 fxml 文件中创建一个 fileChooser。我的代码如下所示:
<HBox alignment="CENTER">
<Label text="Tower 1 Image" />
<TextField fx:id="tower1ImageField" />
<FileChooser fx:id ="tower1FileChooser" />
</HBox>
控制器的内容如下:
public class HudBuilderController{
@FXML TextField tower1ImageField;
@FXML FileChooser tower1FileChooser;
File towerFile;
@FXML TextField tower2ImageField;
@FXML FileChooser tower2FileChooser;
}
但是,我收到一个我不明白的错误:
Caused by: java.lang.IllegalArgumentException: Unable to coerce javafx.stage.FileChooser@5e85f35 to class javafx.scene.Node.
at com.sun.javafx.fxml.BeanAdapter.coerce(Unknown Source)
at javafx.fxml.FXMLLoader$Element.add(Unknown Source)
at javafx.fxml.FXMLLoader$ValueElement.processEndElement(Unknown Source)
at javafx.fxml.FXMLLoader.processEndElement(Unknown Source)
... 26 more
我已经尝试在控制器中实例化 FileChooser,但我认为我需要向 fxml 文件添加更多内容。有什么帮助吗?谢谢!
FileChooser
不是从 Node
延伸而来,因此您不能在 FXML
中使用它。不要忘记 FXML 只是您的用户界面的表示。无需将要在控制器中使用的所有组件添加到 FXML
.
你只需要在你的控制器中初始化一个FileChooser
:
FileChooser fileChooser = new FileChooser();
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
fileChooser.getExtensionFilters().add(extFilter);
File file = fileChooser.showOpenDialog(primaryStage);
System.out.println(file);
JavaFX 8 API Reference: FileChooser
最后 FileChooser
是一个在您的屏幕上打开的对话框。不确定为什么要将它包含在 FXML 中?只需在您的代码中使用它并使用您获得的文件路径即可。
HBox默认的属性是children
,是一个节点列表。由于FileChooser不是一个Node,所以不能添加到HBox的子节点列表中。