2015-07-11 75 views
0

它在OpenJDK的TextFlow示例中說,它可以將任意節點作爲子節點,例如,按鈕。我想知道WebView能否成爲一個可能的孩子?如果是這樣,那麼我一定是做錯了什麼。當我將它添加到TextFlow時,WebView只佔用空間,但不顯示任何內容。我嘗試過的內容從簡單的HTML頁面到YouTube等服務的視頻。WebView在TextFlow中是否可嵌入?

由於此控件相當新,因此我無法在線找到現有用例。

如果你想知道爲什麼我想要這個。我有一個顯示豐富內容的ListView。如果TextFlow能夠顯示任何節點,那麼它可以節省我爲我想在ListView上顯示的不同類型創建多個擴展類(例如視頻,格式化文本,HTML - 我已經做了這些,並且它們工作正常),而且我可以通過管理TextFlow的孩子輕鬆管理內容。

謝謝。

回答

2

是的,你可以。請注意,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("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

+0

漂亮!我每天都會學到新的東西。謝謝! –