我打算再试一次。。。我是Scenebuilder的新手,我正在尝试为我的项目创建一个照片库!我已经添加了我想要的,那就是一个图像视图,其中的图像是从FileChooser中选择的。。。但是现在我想得到一个建议,如何保存这个,并在每次按下addPhoto按钮时创建一个新的,而不是覆盖我在ImageView中已经有的。以下是我的addPhoto按钮代码:
@FXML
public void initialize(ActionEvent e) throws Exception{
addPhotos.setOnAction(event -> {
FileChooser chooser = new FileChooser();
File file = chooser.showOpenDialog(null);
pic = new Image(file.toURI().toString());
if(pic != null) {
ImageView imgView = new ImageView(pic);
}
imgView.setImage(pic);
});
FXML代码:
<BorderPane prefHeight="737.0" prefWidth="934.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="legioDesk.GalleryController">
<top>
<Button fx:id="addPhotos" mnemonicParsing="false" onAction="#initialize" text="addPhotos" BorderPane.alignment="CENTER" />
</top>
<center>
<TilePane fx:id="tp" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<children>
<ImageView fx:id="imgView" fitHeight="306.0" fitWidth="378.0" pickOnBounds="true" preserveRatio="true" />
</children>
</TilePane>
</center>
</BorderPane>
好吧,既然你说单一图像版本有效,现在你想添加一个新图像。抓住你的TilePane,得到孩子,然后添加你的图像视图。
pic = new Image(file.toURI().toString());
if(pic != null) {
ImageView nextView = new ImageView(pic);
tp.getChildren().add(nextView);
}
//delete this it is changing the original one.
//imgView.setImage(pic);
这可能可行,但我无法测试它,因为您没有提供足够的代码。
您在事件处理程序中创建了一个新的图像视图,但您从未对其进行任何操作,因此它被丢弃。
请注意,两个ImageView都有相同的变量名:您创建(和放弃)的变量名的作用域是if块,因此您在块外引用的变量名是您在FXML文件中定义的变量名。
所以你的代码可以
@FXML
public void initialize(ActionEvent e) throws Exception{
addPhotos.setOnAction(event -> {
FileChooser chooser = new FileChooser();
File file = chooser.showOpenDialog(null);
pic = new Image(file.toURI().toString());
if(pic != null) {
// Create a new image view, containing the selected image
// (but do nothing with it)
ImageView imgView = new ImageView(pic);
}
// now update the existing ImageView (from the FXML file) with
// the chosen image:
imgView.setImage(pic);
});
}
您想要做的(我猜,因为您没有非常清楚地解释所需的行为)是将新的图像视图添加到磁贴窗格中:
@FXML
public void initialize(ActionEvent e) throws Exception{
addPhotos.setOnAction(event -> {
FileChooser chooser = new FileChooser();
File file = chooser.showOpenDialog(null);
pic = new Image(file.toURI().toString());
if(pic != null) {
ImageView imgView = new ImageView(pic);
imgView.setFitWidth(306);
imgView.setFitHeight(378);
imgView.setPreserveRatio(true);
tp.getChildren().add(imgView);
}
});
}
当然,您不需要FXML文件中的图像视图:
<BorderPane prefHeight="737.0" prefWidth="934.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="legioDesk.GalleryController">
<top>
<Button fx:id="addPhotos" mnemonicParsing="false" onAction="#initialize" text="addPhotos" BorderPane.alignment="CENTER" />
</top>
<center>
<TilePane fx:id="tp" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
</TilePane>
</center>
</BorderPane>
我对javafx和场景构建器非常陌生。当单击按钮时,我试图创建一个新标签。以下是按钮创建标签的方法: 但它不起作用:(是否因为我没有在fxml中创建lbl1?是否可以在java代码中创建标签而不在fxml中创建?请帮助我!
我正在使用IDEA(与OpenJDK 11一起使用),并且我正在尝试使用SceneBuilder来显示我的FXML文件。它可以工作,除非我使用继承的JavaFX组件,例如: 我总是得到一个错误:
JavaFX中存在控件ToggleGroup。我已经安装了,版本: 在中找不到此控件: 谢谢你的帮助!
嗨,我有javafx tableview问题。我试过解决办法,但没能解决这个问题。有行,可以在行之间切换,但数据没有显示。我不明白问题出在哪里。你能帮我一下吗?
有什么建议如何解决这个问题吗?
所以我要做的是,我要编写一个GUI来在LineChart上显示实时数据。到目前为止,我可以让linechart工作,但不能进入GUI。 使用scenebuilder,我制作了一个带有linechart对象的视图,以便将其链接到我生成的图表。但由于某些原因,这似乎不能与我的MainApp中的代码一起工作。 这只显示了带有空线程的视图。我知道图表应该知道然而,因为我可以使用它来创建一个场景,并显示到G