Обновление размера и местоположения стадии JavaFX не работает - PullRequest
0 голосов
/ 01 июля 2019

Я новичок в JavaFX и понимаю, что в Swing / JFrames есть возможность обновить экран с помощью метода validate.Существует ли эквивалентный метод в библиотеке JavaFX для этапов?Когда я выполняю Thread.sleep () в следующем коде и обновляю размер и местоположение этапа, этап загружается по истечении времени и затем мгновенно перемещается.Это не то, что я хотел.Я надеялся на загрузку сцены, ожидание времени, а затем обновление местоположения и размера.Что именно здесь не так?Спасибо!

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class Driver extends Application
{    
    public static void main(String [] args) throws Exception
    {
        launch(args);      
    }

    @Override
    public void start(Stage stage) throws Exception 
    {             
        // Create the WebView
        WebView webView = new WebView();

        // Create the WebEngine
        final WebEngine webEngine = webView.getEngine();

        // LOad the Start-Page
        webEngine.load("https://www.reddit.com");

        // Update the stage title when a new web page title is available
        webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() 
        {
            public void changed(ObservableValue<? extends Worker.State> ov, Worker.State oldState, Worker.State newState) 
            {
                if (newState == Worker.State.SUCCEEDED) 
                {
                    //stage.setTitle(webEngine.getLocation());
                    stage.setTitle(webEngine.getTitle());
                }
            }
        });

        // Create the VBox
        VBox root = new VBox();

        // Add the WebView to the VBox
        root.getChildren().add(webView);

        // Create the Scene
        Scene scene = new Scene(root);

        // Add  the Scene to the Stage
        stage.setWidth(200);
        stage.setHeight(200);
        stage.setScene(scene);
        stage.setX(500);
        stage.setY(500);
        stage.show();
        Thread.sleep(5000);
        stage.setX(800);
        stage.setY(200);
        stage.setWidth(60);
        stage.setHeight(60);
   }
}

1 Ответ

0 голосов
/ 01 июля 2019

PauseTransition должно работать.

Заменить:

Thread.sleep(5000);
stage.setX(800);
stage.setY(200);
stage.setWidth(60);
stage.setHeight(60);

С:

PauseTransition wait = new PauseTransition(Duration.seconds(5));
wait.setOnFinished((e) -> {
    /*YOUR METHOD*/
    stage.setX(800);
    stage.setY(200);
    stage.setWidth(60);
    stage.setHeight(60);
});
wait.play();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...