4

我正在寻找一种使用 JavaFX HTMLEditor 的 setHtmlText 添加本地图像的方法。我可以添加一个远程图像没问题:

HTMLEditor editor = new HTMLEditor();  
    editor.setHtmlText("<img src=\"http://someaddress.com\" width=\"32\" height=\"32\" >");

但不能对本地图像执行此操作

HTMLEditor editor = new HTMLEditor();  
    editor.setHtmlText("<img src=\"categoryButton.fw.png\" width=\"32\" height=\"32\" >");

此按钮与 java 源代码处于同一级别。那么为什么这行不通呢?

4

3 回答 3

4

使用getResource获取本地图片资源的位置。

editor.setHtmlText(
  "<img src=\"" + 
     getClass().getResource("categoryButton.fw.png") + 
  "\" width=\"32\" height=\"32\" >"
);

它的工作方式与将内容加载到WebView中的方式相同,如下所示:

如何从 javafx.scene.web.WebEngine#loadContent 加载的 html 页面访问 css 和图像文件?


这是一个屏幕截图:

有图像的编辑器

还有一个可执行示例:

import javafx.application.*;
import javafx.scene.Scene;
import javafx.scene.web.HTMLEditor;
import javafx.stage.Stage;

public class HTMLEditorWithImage extends Application {
  @Override public void start(Stage stage) {
    HTMLEditor editor = new HTMLEditor();
    editor.setHtmlText(
      "<img src=\"" + 
         getClass().getResource("Blue-Fish-icon.png") + 
      "\" width=\"32\" height=\"32\" >"
    );
    stage.setScene(new Scene(editor));
    stage.show();
  }

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

我只是好奇这是否是将图像放入某种文本区域的唯一方法?

  1. 使用 JavaFX 2,您可以将与文本混合的图像嵌入到FlowPane中,如Javafx Text multi-word colorization 中所述。
  2. Java 8 添加了一个TextFlow组件,它允许您将图像嵌入到文本区域中。

以上两种技术仅用于数据显示。两者都不允许编辑插入图像和其他节点的多样式文本。目前,JavaFX 平台为此功能提供的唯一控件是HTMLEditor或具有contenteditable true的WebView或用 JavaScript 编写的嵌入式3rd 方编辑器

已经有一些第 3 方努力使用不依赖于 WebView 或 HTMLEditor 的本机 JavaFX 构造创建样式化文本编辑器,但截至今天,我认为还没有准备好广泛使用。

于 2013-04-04T18:22:11.077 回答
2

示例代码:在图像标签中附加 file:\\ 以引用本地文件。

ScreenCapture x = new ScreenCapture();
String imagePath = x.captureScreen(scCaptureCount+++"", "C:\\work\\temp");
String text = editor.getHtmlText();
editor.setHtmlText(text+"&lt;img src='file:\\\\"+imagePath+"' >" );
于 2014-06-01T16:12:26.623 回答
0

此代码在最后一个结束段落标记或结束正文标记之前插入图像。

String imgUrl = "http://..../image.png";
StringBuilder sb = new StringBuilder(htmlEditor.getHtmlText());
int pos = sb.lastIndexOf("</p>") > -1 ? sb.lastIndexOf("</p>") : sb.lastIndexOf("</body>");
sb.insert(pos, "<span><img src='" + imgUrl + "'></span>");
htmlEditor.setHtmlText(sb.toString());
于 2017-01-26T11:10:17.967 回答