我正在用JavaFX编写一个简单的应用程序。我有一个Scene
,其中三个ImageViews
使用场景生成器创建,另一个Controller
使用.fxml
文件引用。在buttonClick事件上,我想用两个较大的ImageView替换三个小ImageView。这样做的正确方法是什么?
目前我创建了新的.fxml
文件,复制了旧文件中的所有内容并删除了一个ImageView
。这给了我一个LoadException
,因为EventHandler
中的Controller
引用了已删除的ImageView
。我还应该更改Controller
吗?
答案 0 :(得分:0)
我对这个简单操作的解决方案。我使用了一个控制器和容器,您可以在其中动态更改内容。在这个解决方案中,我用一个VBox创建了FXML,并在点击按钮后更改了内容。
我不这么认为,在这种情况下你应该改变场景。当然,就像写了James_D一样,如果你想这样做,你应该有一个控制器用于一个FXML。
控制器:
public class PictureChange {
@FXML VBox vBox;
@FXML Button button;
@FXML private void initialize() {
ImageView v1 = new ImageView(new Image(this.getClass().getResource("/smallPic.png").toExternalForm()));
ImageView v2 = new ImageView(new Image(this.getClass().getResource("/smallPic.png").toExternalForm()));
ImageView v3 = new ImageView(new Image(this.getClass().getResource("/smallPic.png").toExternalForm()));
vBox.getChildren().addAll(v1, v2, v3);
}
@FXML private void changePictures() {
Image bigImage = new Image(this.getClass().getResource("/bigPic.png").toExternalForm());
ImageView vBig = new ImageView(bigImage);
vBox.getChildren().clear();
vBox.getChildren().add(vBig);
}
}
FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.Button?>
<HBox prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="picture.PictureChange">
<VBox fx:id="vBox">
</VBox>
<Button fx:id="button" text="Change Pictures" onAction="#changePictures"/>
</HBox>