Как открыть новый экран после загрузки ProgressBar в JavaFX? - PullRequest
0 голосов
/ 24 октября 2018

Это , что запускается из Main.java.

Это Main.java

import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
import javafx.scene.effect.DropShadow;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Duration;

public class Main extends Application 
{
    public static Stage mainStage;
    ProgressBar pb;

    public static void main(String[] args) 
    {
        Application.launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception 
    {
        VBox root = new VBox();
        root.getStyleClass().add("root");
        root.setAlignment(Pos.CENTER);
        root.setSpacing(20);
        Scene scene = new Scene(root,1024,768);

        ImageView appleIcon = new ImageView("apple.png");

        DropShadow ds = new DropShadow();
        ds.setRadius(5);
        ds.setOffsetX(8);
        ds.setOffsetY(8);
        ds.setColor(Color.BLACK);

        appleIcon.setEffect(ds);

        pb = new ProgressBar();
        pb.setMinSize(400, 20);

        //This line is for CSS Class selectors
        //This line sets a class name for progress bar which I used css file
        pb.getStyleClass().add("red-bar");
        pb.setProgress(0);

        Timeline timeline = new Timeline();
        KeyValue keyValue = new KeyValue(pb.progressProperty(),1);
        KeyFrame keyFrame = new KeyFrame(new Duration(3000),keyValue);
        timeline.getKeyFrames().add(keyFrame);
        timeline.play();

//      if(pb.getProgress() == 1)
//      {
//          mainStage = primaryStage;
//          mainStage.setScene(new loginScene());
//          mainStage.show();
//      }


        root.getChildren().addAll(appleIcon,pb);
        root.getStylesheets().add(getClass().getResource("progress.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.show();
    }

}

Я хочу запустить другой экран при загрузке индикатора выполненияполностью.

Это loginScene.java, который вызывает конструктор loginPane

import javafx.scene.Scene;

public class loginScene extends Scene 
{
    public loginScene()
    {
        super(new loginPane(),1000,700);
    }
}

Это loginPane.java.Это экран, который я хочу запустить после загрузки индикатора выполнения.

import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class loginPane extends Pane
{
    public Stage mainStage;

    public loginPane()
    {
        VBox root = new VBox();
        Scene scene = new Scene(root,1024,768);

        Button bt = new Button("OK");

        root.getChildren().add(bt);
        mainStage = Main.mainStage;
        mainStage.setScene(scene);
        mainStage.show();

    }
}

Я пробовал свойство bind () ProgressBar, но не сработало.

Спасибо

1 Ответ

0 голосов
/ 24 октября 2018

Добавьте обработчик onFinished к ключевому кадру.

EventHandler<ActionEvent> onFinished = e->{
   mainStage = primaryStage;
   mainStage.setScene(new loginScene());
   mainStage.show();
};
KeyFrame keyFrame = new KeyFrame(new Duration(3000), onFinished ,keyValue);

И небольшое исправление, необходимое для вашего класса LoginPane.

class LoginPane extends Pane    {
        public LoginPane()        {
            VBox root = new VBox();
            Button bt = new Button("OK");
            root.getChildren().add(bt);
            getChildren().add(root);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...