当前位置: 首页 > 知识库问答 >
问题:

如何在JavaFX中检测已完成的调整大小操作?

储阳曦
2023-03-14

我有一个舞台,一个场景和一个WebView节点。当我将窗口扩展到更大的尺寸时--由于WebView,事情变得相当缓慢。我想要做的是,只有当窗口的大小调整完成时才填充WebView的新空间(这是我在窗口的可调整大小的控件/边缘上释放鼠标左键)。现在我可以设置最大值。此节点的大小为默认情况下的大小-这将阻止它的扩展。但是如何检测窗口上已完成的调整大小操作的实际事件呢?使用绑定,我可以验证大小调整是否发生--但这是瞬时的(W&D的属性在W/O释放LMB时立即改变),而我只需要在释放LMB时执行操作。建议?

我尝试在舞台上使用addEventFilter for event.any,只是为了查看此事件类型是否可识别--遗憾的是没有用。

我也偶然发现了这篇未回复的帖子。

共有1个答案

林德惠
2023-03-14

这不是对你问题的直接回答。如果我正确理解迟缓,你正面临着某种奇怪的闪光和效果图。为了减少缓慢性,webView的大小可以手动更新,并且更少:

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.layout.PaneBuilder;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import javafx.util.Duration;

public class KSO_Demo extends Application {

    @Override
    public void start(Stage primaryStage) {

        final WebView webView = new WebView();
        webView.getEngine().loadContent("<div style='background-color: gray; height: 100%'>Some content</div>");

        final Pane pane = PaneBuilder.create().children(webView).style("-fx-border-color: blue").build();

        final Timeline animation = new Timeline(
                new KeyFrame(Duration.seconds(.5),
                new EventHandler<ActionEvent>() {

                    @Override
                    public void handle(ActionEvent actionEvent) {
                        webView.setPrefSize(pane.getWidth(), pane.getHeight());
                    }
                }));
        animation.setCycleCount(1);

        primaryStage.setScene(new Scene(pane, 300, 250));

        primaryStage.widthProperty().addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number arg2) {
                animation.play();
            }
        });

        primaryStage.heightProperty().addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number arg2) {
                animation.play();
            }
        });
        primaryStage.show();
    }

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

webView位于窗格中,该窗格不会自动布局其子级。WebView的大小更新延迟了0.5秒,忽略了间隔内的更新。

 类似资料:
  • 在javaFX中,调整画布大小没有这样的方法,唯一的解决方案是从画布扩展。 “从画布扩展”是使画布可调整大小的唯一解决方案吗?因为这个解决方案只有在我们不想使用FXML的情况下才起作用,如果我们在FXML中声明一个画布,我们如何使它可以调整大小? 这是我的代码:

  • 我有下面的代码,它设置了一个特定大小的窗口。它还从外部URL加载图像。

  • 问题内容: 我使用Qt Designer创建了一个简单的UI,并将其转换为Python代码。我搜索了任何方法来检测不断变化的窗口大小。 这是生成的代码: 我发现类似的问题QWidget调整大小信号吗?而本教程将介绍建议重写 QMainWindow的 resizeEvent 方法的大小。 __ 但是他们中的任何一个都不能解决我的问题。是否有任何 调整大小的 功能来检测窗口的大小,如下所示: 问题答案

  • 问题内容: CSS3的resize属性可以分配给任意元素。我正在寻找一种方法来检测divs的这种大小变化(我不介意目前仅在Firefox中有效): 不幸的是,该事件似乎并未在div上触发。发生这种由用户指示的调整大小时,如何在JavaScript中进行检测? 编辑: FWIW我已经在Mozilla打开了一个错误报告。 问题答案: 听事件。从这个答案中得到了想法,这个jsFiddle似乎可以在Fir

  • 这是我的主界面主界面 我在AnchorPane中有一个VBox (Fxid:datePane)。Vbox是蓝色的。 当单击标签为“Add”的按钮时,一个“second.fxml”文件被加载到VBox (Fxid:datePane)中。 加载的 fxml 文件采用 Vbox 的高度和宽度。 第二个.fxml有一个红色的VBox。 然而,如果我调整屏幕大小,加载的文件不会相应地改变其高度和宽度。调整屏

  • 我在StackPane中调整ImageView的大小时遇到了一个问题:如果StackPane是根容器,并且我将图像的高度和宽度绑定到StackPane,则一切正常。 但若我将这样的堆栈窗格放置在网格中,那个么图像的大小就无法正确调整。正如我所读到的,ImageView无法调整大小的问题。有什么方法可以调整它的大小吗?或者你能给一些建议如何调整ImageView的大小吗?