2016-05-10 8 views
0

Ich verwende unten Code für Fortschrittsanzeige für das Laden von Aufgaben. Ich benutze MaskerPane von ControlsFX Fortschrittsanzeige. Aber wenn ich die Komponente benutze, zeigt maskerpane nur 1 Mal an ... Bitte schlage einen besseren Weg vor, um den Fortschrittsindikator anzuzeigen.Fortschrittsanzeige für Javafx App

@FXML 
    private MaskerPane progressPane; 
@FXML 
     private void addMemberSelect() { 
      Task task = new Task<Void>() { 
       @Override 
       protected Void call() throws Exception { 
        progressPane.setVisible(true); 
        return null; 
       } 
       @Override 
       protected void succeeded(){ 
        super.succeeded(); 
        content.setContent(null); 
        ScreensController colllectScreenController = new ScreensController(); 
        colllectScreenController.loadScreen(Screens.ADD_MEMBER); 
        colllectScreenController.setScreen(Screens.ADD_MEMBER); 
        content.setContent(colllectScreenController); 
        progressPane.setVisible(false); 
       } 
      }; 
      new Thread(task).start(); 
     } 
+0

Ihre Frage ist nicht sehr klar. Was möchten Sie mit dem MaskPane erreichen? Was funktioniert nicht? Was meinst du mit "Maskerpane zeigt nur 1 Mal"? – ItachiUchiha

+0

sorry für mein Englisch. Wirklich will ich Fortschritt während des Schaltens der Szenen zeigen. Jede Szene enthält einige db Operationen. So will ich zeigen Fortschrittsanzeigen. Der obige Code, den ich benutze, zeigt nur den Fortschritt einmal.Nächste Mal wird es nicht Zeige irgendeinen Fortschrittsbalken – boycod3

+0

Ich sehe nicht, dass du den Fortschritt mit [updateProgress()] (https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Task.html#updateProgress-double) aktualisierst -double-) auf die Aufgabe. Wenn Sie es nicht verwenden, zeigt die Fortschrittsanzeige niemals den Fortschritt an. Es gibt mehrere Beispiele, die zeigen, wie man es in den Javadocs für [Task] verwendet (https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Task.html). – ItachiUchiha

Antwort

0

Dieses Beispiel kann Ihnen helfen.

public class MaskerPaneTest extends Application { 
@Override 
public void start(Stage primaryStage) throws Exception { 

    MaskerPane progressPane = new MaskerPane(); 
    progressPane.setVisible(false); 

    Button button = new Button("Show"); 
    button.setOnAction(event -> { 

      Task task = new Task<Void>() { 
       @Override 
       protected Void call() throws Exception { 
        progressPane.setVisible(true); 
        Thread.sleep(2000); 
        return null; 
       } 
       @Override 
       protected void succeeded(){ 
        super.succeeded(); 
        progressPane.setVisible(false); 
       } 
      }; 
      new Thread(task).start(); 
     }); 
    VBox box = new VBox(button, progressPane); 
    box.setAlignment(Pos.CENTER); 
    Scene scene = new Scene(box, 200, 200); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

} Quelle: https://gist.github.com/TheItachiUchiha/13f8cc637872ebac4385f92cd16075a7

ich es getestet und es funktioniert gut, so dass Sie es anpassen können.