2017-02-17 3 views
-1

Пока я пытался загрузить две разные сцены, он не открывает изображение FXML, в основном я хочу сначала открыть изображение FXML, а затем приветственный экран. Некоторые, как изображение сцены не отображается.Изображение FXML не открывается в 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

Основываясь на ваш комментарий.

Использование PauseTransition ждать WelcomeFXMLController:

@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

Смежные вопросы