在JavaFX中更改场景时我应该更改控制器吗?

时间:2016-09-24 15:51:19

标签: java javafx

我正在用JavaFX编写一个简单的应用程序。我有一个Scene,其中三个ImageViews使用场景生成器创建,另一个Controller使用.fxml文件引用。在buttonClick事件上,我想用两个较大的ImageView替换三个小ImageView。这样做的正确方法是什么?

目前我创建了新的.fxml文件,复制了旧文件中的所有内容并删除了一个ImageView。这给了我一个LoadException,因为EventHandler中的Controller引用了已删除的ImageView。我还应该更改Controller吗?

1 个答案:

答案 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>