翻譯|使用教程|編輯:吉煒煒|2024-12-27 11:19:45.570|閱讀 99 次
概述:在本文中,我們將探討如何通過(guò)使用 JxBrowser 和 Quill.js 將現(xiàn)代富文本編輯器嵌入到 Java 桌面應(yīng)用程序中,來(lái)克服 Swing、JavaFX 和 SWT 中內(nèi)置編輯器的局限性。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
JxBrowser是一個(gè)跨平臺(tái)的 JVM 庫(kù),它允許您將基于 Chromium 的 Browser 控件集成到 Compose、Swing、JavaFX、SWT 應(yīng)用程序中,并使用 Chromium 的數(shù)百種功能。
所有桌面工具包都提供文本編輯控件,從最基本的選項(xiàng)到更高級(jí)的選項(xiàng)。但是富文本編輯呢?是否有允許用戶格式化文本和添加圖片的控件?是否有可以在 Java 應(yīng)用程序中使用的所見即所得編輯器?
在本文中,我們將探討如何通過(guò)使用 JxBrowser 和 Quill.js 將現(xiàn)代富文本編輯器嵌入到 Java 桌面應(yīng)用程序中來(lái)解決此問(wèn)題。
Swing 和 JavaFX 中的內(nèi)置編輯器功能有限,無(wú)法提供文本格式、樣式和多媒體支持等高級(jí)功能。在處理大量數(shù)據(jù)或復(fù)雜文本結(jié)構(gòu)時(shí),它們的效率也很差。同時(shí),SWT 根本不提供富文本編輯器。
在 Swing 中,目前有兩個(gè)可用的文本編輯器:JRichTextEditor 和 TinyMCE。JRichTextEditor 已經(jīng)九年沒(méi)有更新了,最后一次在 GitHub 上提交也是在那時(shí),而且它的文檔已經(jīng)過(guò)時(shí)了。另一方面,TinyMCE 是一個(gè)商業(yè)付費(fèi)編輯器,默認(rèn)情況下是基于云的。對(duì)于尋求免費(fèi)替代方案的開發(fā)人員來(lái)說(shuō),像 Quill 或類似的解決方案可能是一個(gè)可行的選擇,它們可以完全控制您的數(shù)據(jù),而無(wú)需依賴外部服務(wù)器。
JavaFX 提供了兩種富文本編輯器選項(xiàng):RichTextFX 和 RichTextArea,這兩種都是現(xiàn)代且維護(hù)良好的。它們是功能強(qiáng)大的工具包,可讓您構(gòu)建富文本編輯器,但需要相當(dāng)多的 DIY 工作才能啟動(dòng)和運(yùn)行。
SWT 依賴于操作系統(tǒng)提供的 UI 小部件,并且它沒(méi)有內(nèi)置的富文本編輯器,因?yàn)椴僮飨到y(tǒng)不提供此類小部件。Nebula RichText 提供了一種替代方案,但它作為嵌入 CKEditor 的瀏覽器組件而不是獨(dú)立的編輯器。
雖然 Nebula RichText 是一種方法,但它使用內(nèi)置瀏覽器組件,可能不適合專業(yè)用例。更靈活、更強(qiáng)大的選項(xiàng)是使用 JxBrowser,它允許您在 SWT 應(yīng)用程序中嵌入瀏覽器,從而實(shí)現(xiàn)任何基于 Web 的所見即所得編輯器的順利集成。
JxBrowser 支持集成現(xiàn)代基于 Web 的編輯器,從而克服了內(nèi)置編輯器的局限性。在以下情況下,請(qǐng)選擇 JxBrowser:
JxBrowser 嵌入 Web 應(yīng)用程序的能力確保了 Quill 等工具的有效集成,提供強(qiáng)大的文本編輯功能、完全自定義以及跨 Swing、JavaFX 和 SWT 的兼容性。這種組合可在所有主要操作系統(tǒng)上運(yùn)行,從而保持一致的用戶體驗(yàn)。
	 
 
在 JxBrowser 中加載了所見即所得編輯器的 Java 應(yīng)用程序。
在這篇博文中,我們將把 JxBrowser 添加到 Gradle 項(xiàng)目中。如果您使用的是其他構(gòu)建系統(tǒng),則可以使用我們的Maven 工件,將 JAR 文件添加到類路徑,甚至創(chuàng)建獨(dú)立的 Eclipse 插件。
要將 JxBrowser 添加到項(xiàng)目中,請(qǐng)應(yīng)用 JxBrowser 插件并添加必要的依賴項(xiàng):
plugins {
   id("com.teamdev.jxbrowser") version "1.2.1"
}
jxbrowser {
   version = "8.2.1"
}
dependencies {
   // Add the dependency to JxBrowser integration with Swing.
   //
   // Also, available: jxbrowser.swt, jxbrowser.javafx, jxbrowser.compose.
   implementation(jxbrowser.swing)
   // Add the dependency to Chromium binaries for the current platform.
   implementation(jxbrowser.currentPlatform)
}
在建議的方法中,實(shí)際的文本編輯器是網(wǎng)頁(yè)上的 JavaScript 小部件。讓我們創(chuàng)建此頁(yè)面:
<!DOCTYPE html>
<html lang="en">
<head>
    <!-- Make sure to use the latest verion of the library. -->
    <script src="http://cdn.jsdelivr.net/npm/quill@2.0.3/dist/quill.js"></script>
    <link  rel="stylesheet" />
</head>
<body>
    <div id="editor"></div>
    <script>
        window.quill = new Quill('#editor', {
            theme: 'snow'
        });
    </script>
</body>
</html>
之后,我們可以將頁(yè)面連同 JavaScript 和 CSS 資產(chǎn)一起復(fù)制到項(xiàng)目的資源中。
然后,讓我們創(chuàng)建瀏覽器并顯示編輯器:
private void addTextEditor(JPanel container) {
    var engine = Engine.newInstance(OFF_SCREEN);
    var browser = engine.newBrowser();
    var url = this.getClass().getClassLoader().getResource("editor.html");
    browser.navigation().loadUrl(url.toString());
    SwingUtilities.invokeLater(() -> {
        var view = BrowserView.newInstance(browser);
        container.add(view);        
    });
}
要從 Quill 讀取文本,請(qǐng)執(zhí)行一個(gè)簡(jiǎn)單的 JavaScript 代碼:
String getFormattedText(Browser browser) {
    var frame = browser.mainFrame();
    if (frame.isPresent()) {
        return frame.get().executeJavaScript("quill.getSemanticHTML()");
    } else {
        throw new IllegalStateException("Couldn't obtain the text");
    }
}
將內(nèi)容添加回頁(yè)面也需要一段 JavaScript 代碼:
void setText(Browser browser, String text) {
    browser.mainFrame().ifPresent(frame -> {
        frame.executeJavaScript("quill.setText(\"%s\")".formatted(text));
    });
}
上面的示例演示了使用 JxBrowser 作為富文本編輯器主機(jī)的一個(gè)非常簡(jiǎn)單的案例。對(duì)于生產(chǎn)中的應(yīng)用程序,請(qǐng)考慮以下提示:
class Application {
    private static Engine engine;
    public static void main(String[] args) {
        if (engine == null) {
            // Create the browser engine only once.
            engine = Engine.newInstance(OFF_SCREEN);
        }
        // Create a separate profile for each user.
        var bobProfile = engine.profiles().newIncognitoProfile("Bob");
        var browserOne = bobProfile.newBrowser();
        var browserTwo = bobProfile.newBrowser();
        var aliceProfile = engine.profiles().newIncognitoProfile("Alice");
        var browserThree = aliceProfile.newBrowser();
        var browserFour = aliceProfile.newBrowser();
        ...
    }
}
在本文中,我們演示了如何使用 JxBrowser 和 Quill.js 將現(xiàn)代 HTML 富文本編輯器集成到 Java 桌面應(yīng)用程序中。這種方法克服了 Swing、JavaFX 和 SWT 中內(nèi)置編輯器的局限性,提供了高級(jí)功能和對(duì)文本編輯的完全控制。
如果您有產(chǎn)品試用下載、價(jià)格咨詢、優(yōu)惠獲取,或其他任何問(wèn)題,請(qǐng)聯(lián)系。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:慧都網(wǎng)