WebView "embeddable" 在 TextFlow 中吗?
Is WebView "embeddable" in TextFlow?
它在 TextFlow 的 OpenJDK 示例中说它可以有任意节点作为 children,例如按钮。我想知道 WebView 是否可以 child?如果是这样,那么我一定做错了什么。当我将它添加到 TextFlow 时,WebView 只占用 space,但什么也不显示。我尝试过的内容范围从简单的 HTML 页面到来自 YouTube 等服务的视频。
由于这个控件相当新,我无法在网上找到现有的用例。
如果您想知道我为什么要这个。我有一个显示丰富内容的 ListView。如果 TextFlow 能够显示任何节点,那么它将避免我为我想在 ListView 上显示的不同类型创建多个扩展 类(例如视频、格式化文本、HTML - 这些我已经做了,而且它们工作正常),我可以通过管理 TextFlow 的 children.
轻松管理内容
谢谢。
是的,你可以。请注意,Web 视图将使用其 baselineOffset
进行布局,这不适合在 TextFlow
中使用(我认为发生的情况是它的底部边缘将与底部边缘对齐文本,它会被剪裁到文本行的高度。)你可以通过将它包装在 Group
:
中来解决这个问题
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class WebViewInTextFlow extends Application {
@Override
public void start(Stage primaryStage) {
TextFlow flow = new TextFlow();
WebView webView = new WebView();
webView.getEngine().getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> System.out.println(newState));
webView.getEngine().load("");
flow.getChildren().addAll(new Text("Some text"), new Group(webView), new Text("Some more text"));
primaryStage.setScene(new Scene(flow, 800, 800));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
它在 TextFlow 的 OpenJDK 示例中说它可以有任意节点作为 children,例如按钮。我想知道 WebView 是否可以 child?如果是这样,那么我一定做错了什么。当我将它添加到 TextFlow 时,WebView 只占用 space,但什么也不显示。我尝试过的内容范围从简单的 HTML 页面到来自 YouTube 等服务的视频。
由于这个控件相当新,我无法在网上找到现有的用例。
如果您想知道我为什么要这个。我有一个显示丰富内容的 ListView。如果 TextFlow 能够显示任何节点,那么它将避免我为我想在 ListView 上显示的不同类型创建多个扩展 类(例如视频、格式化文本、HTML - 这些我已经做了,而且它们工作正常),我可以通过管理 TextFlow 的 children.
轻松管理内容谢谢。
是的,你可以。请注意,Web 视图将使用其 baselineOffset
进行布局,这不适合在 TextFlow
中使用(我认为发生的情况是它的底部边缘将与底部边缘对齐文本,它会被剪裁到文本行的高度。)你可以通过将它包装在 Group
:
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class WebViewInTextFlow extends Application {
@Override
public void start(Stage primaryStage) {
TextFlow flow = new TextFlow();
WebView webView = new WebView();
webView.getEngine().getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> System.out.println(newState));
webView.getEngine().load("");
flow.getChildren().addAll(new Text("Some text"), new Group(webView), new Text("Some more text"));
primaryStage.setScene(new Scene(flow, 800, 800));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}