2016-09-24 7 views
0

私はJavaFXで簡単なアプリケーションを書いています。私はSceneをScene Builderで作成した3つのImageViewsと、対応するController.fxmlというファイルから参照しています。 buttonClickイベントでは、3つの小さなImageViewを2つの大きなImageViewに置き換えたいと思っています。それを行う正しいアプローチは何ですか?JavaFXでシーンを変更するときにコントローラーを変更する必要がありますか?

現在、私は新しい.fxmlファイルを作成し、古いものからすべてをコピーして、削除したものをImageViewとしました。これは、私がControllerEventHandlerがあり、削除されたImageViewを参照しているので、私にLoadExceptionを与えます。 Controllerも変更する必要がありますか?

+2

すべてのFXMLファイルは、独自のコントローラクラス –

+0

を持っている必要があり、@James_D、ありがとうございました。 –

+0

なぜあなたは1つのコントローラでできないのですか?たとえば、VBoxのすべてを実行します。クリックした後、3つのImagesViewがあるVboxをクリアし、2つだけ追加します。この変更は動的です。 – BadVegan

答えて

0

この簡単な操作のための私のソリューション。私は動的にコンテンツを変更できるコントローラとコンテナを1つ使用しました。このソリューションでは、1つの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> 
関連する問題