IT序号网

javafx之javafx 中的上标和下标

grandyang 2024年02月23日 编程语言 7 0

有人可以建议在现有的 javafx HTML 编辑器中添加上标和下标控件的解决方法。 我正在尝试开发一个具有粗体、斜体、上标、下标和字体选择器作为控件的公式字段编辑器。

请您参考如下方法:

如果没有一些非常严重的黑客攻击,这是不可能的 (AFAIK),涉及访问 API 中不打算访问的部分。以下或多或少的作品;我基于 source code对于 HTMLEditorSkin。您可能需要说服您的 IDE 让您访问相关的包。这不是特别推荐的,它几乎肯定不会在 Java 9 中工作。

import com.sun.javafx.webkit.Accessor; 
import com.sun.webkit.WebPage; 
 
import javafx.application.Application; 
import javafx.application.Platform; 
import javafx.event.Event; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.ToggleButton; 
import javafx.scene.control.ToggleGroup; 
import javafx.scene.control.ToolBar; 
import javafx.scene.input.KeyEvent; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.web.HTMLEditor; 
import javafx.scene.web.WebView; 
import javafx.stage.Stage; 
 
public class HTMLEditorHack extends Application { 
 
    @Override 
    public void start(Stage primaryStage) { 
        HTMLEditor editor = new HTMLEditor(); 
        Scene scene = new Scene(editor); 
        editor.applyCss(); 
        editor.layout(); 
 
        WebView webView = (WebView) editor.lookup(".web-view"); 
        ToolBar toolbar = (ToolBar) editor.lookup(".bottom-toolbar"); 
        ToggleGroup toggleGroup = new ToggleGroup(); 
 
        createToggleButton("superscript", "Super", toggleGroup, webView, toolbar); 
        createToggleButton("subscript", "Sub", toggleGroup, webView, toolbar); 
 
        primaryStage.setScene(scene); 
        primaryStage.show(); 
    } 
 
    private void createToggleButton(String command, String label, ToggleGroup toggleGroup, WebView webView, ToolBar toolbar) { 
        ToggleButton button = new ToggleButton(label); 
        button.setFocusTraversable(false); 
        button.selectedProperty().addListener((obs, wasSelected, isSelected) -> { 
            WebPage page = Accessor.getPageFor(webView.getEngine()); 
            if (page.queryCommandState(command) != isSelected) { 
                page.executeCommand(command, null); 
            } 
        }); 
        button.setToggleGroup(toggleGroup); 
        toolbar.getItems().add(button); 
 
        EventHandler<Event> updateState = e -> { 
            Platform.runLater(() -> { 
                WebPage page = Accessor.getPageFor(webView.getEngine()); 
                button.setDisable(! page.queryCommandEnabled(command)); 
                button.setSelected(page.queryCommandState(command)); 
            }); 
        }; 
        webView.addEventHandler(KeyEvent.ANY, updateState); 
        webView.addEventHandler(MouseEvent.MOUSE_PRESSED, updateState); 
        webView.addEventHandler(MouseEvent.MOUSE_RELEASED, updateState); 
    } 
 
    public static void main(String[] args) { 
        launch(args); 
    } 
} 

如果您需要一种强大的方法来创建方程式编辑器,我可能会考虑构建您自己的,而不是使用/修改 HTMLEditor。有一个第三方库,RichTextFX可用于创建具有不同样式的可编辑文本区域。从那里开始并添加您自己的样式控件。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!