2017-02-17 12 views
-1

2つの異なるシーンをロードしようとしていても、イメージFXMLは開かれません。基本的にイメージFXMLを開き、その後にウェルカムスクリーンを表示します。どのように画像のシーンが表示されていないいくつか。イメージFXFXがJavaFXで開かない

Main.java

public class Main extends Application { 

@Override 
public void start(Stage stage) throws Exception { 
    System.out.println("im in main"); 
    Parent root = FXMLLoader.load(getClass().getResource("ImageScreen.fxml")); 


    Scene scene = new Scene(root); 

    stage.setScene(scene); 
    stage.setTitle("test"); 
    stage.show(); 
} 
public static void main(String[] args) { 
    launch(args); 
} 

}

ImageScreen.fxml

<?xml version="1.0" encoding="UTF-8"?> 
<?import javafx.scene.image.Image?> 
<?import javafx.scene.image.ImageView?> 
<?import javafx.scene.layout.Pane?> 
<?import javafx.scene.layout.StackPane?> 

<StackPane fx:id="imagepane" maxHeight="-Infinity" maxWidth="-Infinity" 
minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" 
prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.102"  xmlns:fx="http://javafx.com/fxml/1" 
fx:controller="application.ImageScreenController"> 
<children> 
    <ImageView fitHeight="438.0" fitWidth="603.0" pickOnBounds="true" 
     preserveRatio="true"> 
     <image> 
      <Image url="@bamboo-fountain-and-zen-stone.jpg" /> 
     </image> 
    </ImageView> 
    <Pane prefHeight="200.0" prefWidth="200.0" /> 
</children> 

ImageScreenController

public class ImageScreenController implements Initializable { 

@FXML 
private StackPane imagepane; 

public static AnchorPane welcomepane; 

@Override 
public void initialize(URL url, ResourceBundle rb) { 

    AnchorPane pane; 
    try { 
     System.out.println("im in controller"); 
     pane = FXMLLoader.load(getClass().getResource("WelcomeFXMLDoc.fxml")); 
     imagepane.getChildren().setAll(pane); 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

}

WelcomeFXMLDoc.fxml

<?xml version="1.0" encoding="UTF-8"?> 
<?import javafx.scene.layout.AnchorPane?> 
<?import javafx.scene.text.Font?> 
<?import javafx.scene.text.Text?> 


<AnchorPane fx:id="welcomepane" maxHeight="-Infinity" 
maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" 
prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.102" 
xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.WelcomeFXMLController"> 
<children> 
    <Text layoutX="212.0" layoutY="100.0" strokeType="OUTSIDE" 
     strokeWidth="0.0" text="Welcome" wrappingWidth="176.13671875"> 
     <font> 
      <Font size="35.0" /> 
     </font> 
    </Text> 
</children> 

WelcomeFXMLController.java

public class WelcomeFXMLController implements Initializable { 

/** 
* Initializes the controller class. 
* 
*/ 

@FXML 
private AnchorPane welcomepane; 

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    // TODO 
} 

}

答えて

1

ImageScreenControllerには、imagepane.getChildren().setAll(pane)を使用します。 setAll()コレクションをクリアし、新しい要素を追加します。この場合、シーングラフからImageViewを削除し、welcomepaneのみを表示します。

代わりにimagepane.getChildren().add(pane);を使用して、不要になったときにwelcomepaneを削除してください。あなたのコメントに基づいて

EDIT

使用PauseTransitionWelcomeFXMLControllerを待つ:

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    PauseTransition pt = new PauseTransition(Duration.seconds(10)); 
    pt.setOnFinished(e -> { 
     AnchorPane pane; 
     try { 
      System.out.println("im in controller"); 
      pane = FXMLLoader.load(getClass().getResource("WelcomeFXMLDoc.fxml")); 
      imagepane.getChildren().setAll(pane); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    }); 
    pt.play(); 
} 
+0

私はこのアプローチに従えば、歓迎シーンが映像シーンが完全にロードされると、私は私がしたい、したくない画像シーンの上に上書きされます、イメージシーンがなくなるはずですが、イメージシーンにボタンを追加しても、ウェルカムシーンだけをロードする必要があります。これをクリックするとウェルカムシーンが開きますが、イメージシーンにボタンを置いてはいけません。 – user2459816

+0

イメージシーンの読み込み中に長時間実行されていますか?提供されたコードでは、画像のスクリーンがすぐに表示されるので、それを表示する必要はありません。 – MBec

+0

イメージを最初にロードして10秒間待ってからウェルカムシーンをロードしたいのですが、上記のコードは提供されていません。もしあなたが完全に助けてくれるのであれば – user2459816

関連する問題