我从Element
({1}}(JavaFX)的Document
获得WebEngine
,并使用body元素中的getTextContent()
函数获取文本内容。 body元素具有属性contenteditable="true"
,因此我可以在其上书写。但是,从getTextContent()
返回的字符串不包含换行符。所以
Line 1
Line 2
Line 3
在身体上会返回Line 1Line 2Line 3
我需要它包含换行符。我怎么能这样做呢?
或者,如果我能找到一种方法来设置每个角色的样式,我可以使用<TextArea>
代替<body contenteditable="true"
。但我不知道如何。
感谢。
答案 0 :(得分:1)
后续行将作为<div>
元素子元素的新<body>
元素插入到html中。
您可以通过执行javascript代码段来查看HTML内容:
String html = (String)webView.getEngine()
.executeScript("document.documentElement.innerHTML");
要获取各个行,您需要遍历<body>
个子节点。这是一个例子:
import java.util.ArrayList;
import java.util.List;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class EditableWebView extends Application {
@Override
public void start(Stage primaryStage) {
WebView webView = new WebView();
webView.getEngine().loadContent(
"<html><body contentEditable=\"true\"></body></html>");
Button contentButton = new Button("Show content");
contentButton.setOnAction(e -> {
List<String> lines = new ArrayList<>();
Node body = webView.getEngine()
.getDocument()
.getElementsByTagName("body")
.item(0);
NodeList childNodes = body.getChildNodes();
for (int i=0; i<childNodes.getLength(); i++) {
lines.add(childNodes.item(i).getTextContent());
}
lines.forEach(System.out::println);
});
Button htmlButton = new Button("Show HTML");
htmlButton.setOnAction(e ->
System.out.println(webView.getEngine()
.executeScript("document.documentElement.innerHTML")));
HBox buttons = new HBox(5, contentButton, htmlButton);
BorderPane root = new BorderPane(webView, null, null, buttons, null);
Scene scene = new Scene(root, 600, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
如果您需要其他选项来创建可设置样式的可编辑文本,请查看RichTextFX