WebView是否可以“嵌入”TextFlow?

时间:2015-07-11 05:54:20

标签: java webview javafx-8 textflow

它在TextFlow的OpenJDK示例中说它可以将任意节点作为子节点,例如按钮。我想知道WebView是否可能是一个可能的孩子?如果是这样,那么我一定是做错了。当我将它添加到TextFlow时,WebView只占用空间,但不显示任何内容。我尝试过的内容包括简单的HTML网页,以及YouTube等服务中的视频。

由于此控件相当新,我无法在线找到现有用例。

如果你想知道为什么我想要这个。我有一个显示丰富内容的ListView。如果TextFlow能够显示任何节点,那么它将为我想要在ListView上显示的不同类型创建多个扩展类(例如视频,格式化文本,HTML - 这些我已经做过,并且它们正常工作),我只需管理TextFlow的孩子就可以轻松管理内容。

感谢。

1 个答案:

答案 0 :(得分:2)

是的,你可以。请注意,网页视图将使用其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("http://stackoverflow.com/questions/31353921/is-webview-embeddable-in-textflow/31357609#31357609");


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

enter image description here