java - 更新 JavaFX 阶段的大小和位置不起作用

标签 java swing javafx

我是 JavaFX 的初学者,我了解 swing/JFrames,可以使用验证方法更新屏幕。 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);
   }
}

最佳答案

PauseTransition应该管用。

Replace:

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

With:

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();

关于java - 更新 JavaFX 阶段的大小和位置不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56837553/

相关文章:

java - 设计一个基于插件的 java 应用程序

java - AlarmManager 有时会延迟触发,或者根本不触发

java - org.openqa.selenium.NoSuchElementException - Selenium 测试

java - 在 XYLineChart 上显示 X 值

javafx - 如何禁用 JavaFx DatePicker 的 TextField?

java - 如何将数据添加到 JavaFX 表行/单元格

java - Java字符集转换

java - 如何阻止用户生成更多事件?

java - 在向 jTable 添加新列后插入新行会导致数组超出范围异常

Java:应用程序启动方法中出现异常 java.lang.reflect.InitationTargetException