JavaFX HTMLEditor触发字体大小更改编程



我有一个HTML编辑器,我隐藏了整个工具栏。我希望允许用户使用上下文菜单来更改字体大小。我认为在编辑器中修改HTML的最安全的方法是触发工具栏ComboBox上的更改事件来更改字体大小。在本例中,为了简单起见,我试图通过单击按钮来触发该更改。

在下面的示例中,我创建了一个标准的HTML编辑器,然后是尝试从编辑器中提取ComboBox的按钮,将其值设置为第一个选项,并在其上触发一个操作事件。因此,如果您在编辑器中选择了一些文本并按下按钮,则所选文本的字体大小应该改变。但它没有。

我已经成功地在工具栏切换按钮和颜色选择器上使用了这种方法,但无法将其用于组合框。

编辑下面是我可复制的例子:

package main;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.VBox;
import javafx.scene.web.HTMLEditor;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
public class Main extends Application {

boolean ifLoadComplete = false;


@Override
public void start(Stage _primaryStage) {
VBox vBox = new VBox();
vBox.setPrefWidth(800);
vBox.setPrefHeight(800);
HTMLEditor editor = new HTMLEditor();
vBox.getChildren().add(editor);

WebView webView = (WebView)editor.lookup("WebView");
WebEngine webEngine = webView.getEngine();
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<Object>() {
@SuppressWarnings({"restriction"})
@Override
public void changed(ObservableValue<?> observableValue, Object oldValue, Object newValue) {
// ok mamke sure loading the content ws successful, apparently this gets called a few times?
if (newValue != Worker.State.SUCCEEDED) { 
return; 
}       
ifLoadComplete = true;

}
}
);
Button testButton = new Button("Test");
testButton.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent arg0) {
if (!ifLoadComplete) return;

System.out.println("Setting font size combo!");

ComboBox combo = (ComboBox)editor.lookup(".font-menu-button");
combo.getSelectionModel().select(3);
combo.fireEvent(new ActionEvent());
}
});
vBox.getChildren().add(testButton);


String content = "<p>This is a test!</p>";
webEngine.loadContent(content);

Scene scene = new Scene(vBox);
_primaryStage.setTitle("Test Program");
_primaryStage.setScene(scene);
_primaryStage.show();
}



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

任何想法都将是感激的。你可以在这里找到htmlitor的css参考指南https://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html编辑器

感谢

所以我也有这个问题。只能通过HTML样式标签设置。

创建一个样式标签为background-color的HTML文件,如

<html>
<head>
<meta charset="utf-8"/>
<style>
body {
background-color: #383838;
color: #DEDEDE;
font-family: "sans-serif";
}
</style>
</head>
<body contentEditable="true">
YOUR_BODY
</body>
</html>

使用HTMLEditor的setHTMLText将HTML片段添加到编辑器

欣赏黑暗的背景

最新更新