2015-10-28 4 views
-1

Эта функция загружает мой «Пожалуйста, подождите ...» графический интерфейс:Как я могу показать погрузочную графический интерфейс в JavaFX

public void showLoading(Stage ownerStage){ 
try { 
     FXMLLoader loader = new FXMLLoader();loader.setLocation(MainApp.class.getResource("/de/ern/loading/Loading.fxml")); 
     AnchorPane page = (AnchorPane) loader.load(); 

     LoadingController controller = loader.getController(); 
     controller.setLoadingText("Please wait..."); 
     waitStage = new Stage(); 
     waitStage.setTitle("Please wait"); 
     waitStage.getIcons().add(new Image(getClass().getResourceAsStream("logo.png")));//setzt das Icon 
     waitStage.initModality(Modality.WINDOW_MODAL); 
     waitStage.initOwner(ownerStage); 
     Scene scene = new Scene(page); 
     waitStage.setScene(scene); 
     waitStage.show(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Как я должен назвать это, потому что, когда я называю его непосредственно это всегда пусто. Отображается только панель с заголовком. Я нашел много фрагментов кода для Swing, но не для javafx.

EDIT:

Я называю это от контроллера основного графического интерфейса, как это:

mainApp.showLoading(primaryStage); 
AllgemeinTab liveWerte = new AllgemeinTab(this); 
liveWerte.setName(getAllgTabName()); 
liveWerte.setBeschreibungDe(getAllgTabBeschreibungDe()); 

и после этого, следует большой транзакции базы данных.

Это мой FXML Файл:

<?xml version="1.0" encoding="UTF-8"?> 
<?import javafx.scene.text.*?> 
<?import javafx.scene.image.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="64.0" prefWidth="292.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.ernst.loading.LoadingController"> 
<children> 
<ImageView fx:id="imgLoading" fitHeight="25.0" fitWidth="25.0" layoutX="20.0" layoutY="20.0" pickOnBounds="true" preserveRatio="true" AnchorPane.bottomAnchor="19.0" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="20.0"> 
    <image> 
     <Image url="@loading.gif" /> 
    </image> 
    </ImageView> 
    <Text layoutX="54.0" layoutY="25.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Status:" AnchorPane.topAnchor="17.0"> 
    <font> 
     <Font name="System Bold" size="12.0" /> 
    </font></Text> 
    <Text fx:id="txtLoadingDescription" layoutX="54.0" layoutY="24.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Beschreibung..." wrappingWidth="230.44140625" AnchorPane.topAnchor="30.0" /> 
</children> 
</AnchorPane> 
+1

Создайте и отправьте сообщение [MCVE]. В коде, который вы опубликовали, нет ничего плохого. –

+0

Можете ли вы вставить свой файл fxml? – ttarczynski

ответ

0

Вы можете показать «загрузки графического интерфейса пользователя», отображая ProgressIndicator

Так показать ProgressIndicator, то вам необходимо сделать свой Backgroundwork в новую тему, а затем заменить ProgressIndicator с новым содержанием.

final ProgressIndicator progress = new ProgressIndicator(); 
progress.setMaxSize(50, 50); 
rootPane.setCenter(progress); 

new Thread(new Runnable() { 

    @Override 
    public void run() { 
     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     Platform.runLater(new Runnable() { 

      @Override 
      public void run() { 
        rootPane.setCenter(new Label("done")); 
      } 
     }); 
    } 
}).start(); 
0

вы можете посмотреть на Preloader (Oracle Doc). Preloader - очень маленькое приложение с Stage, которое загружается до того, как ваше приложение загрузится, и вы можете отправить некоторую информацию в preloader для отображения прогресса.

Возможно, вы получите больше возможностей

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