在JavaFX HTMLeditor中设置本地图像

时间:2013-04-04 04:38:04

标签: image javafx html-editor

我正在寻找一种方法来使用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源位于同一级别。那么为什么这不起作用?

3 个答案:

答案 0 :(得分:4)

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

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

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

How to reach css and image files from the html page loaded by javafx.scene.web.WebEngine#loadContent?


以下是截图:

editorwithimage

可执行样本:

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组件,允许您将图像嵌入到文本区域中。
  3. 上述两种技术仅用于数据显示。既不允许编辑带有图像和插入其中的其他节点的多样式文本。目前,JavaFX平台为此功能提供的唯一控件是HTMLEditorWebView contenteditable true或嵌入式3rd party editor written in JavaScript

    create styled text editors using native JavaFX构造中有一些不依赖WebView或HTMLEditor的第三方努力,但截至今天,我认为没有任何东西可以广泛使用。

答案 1 :(得分:2)

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

ScreenCapture x = new ScreenCapture();
String imagePath = x.captureScreen(scCaptureCount+++"", "C:\\work\\temp");
String text = editor.getHtmlText();
editor.setHtmlText(text+"&lt;img src='file:\\\\"+imagePath+"' >" );

答案 2 :(得分:0)

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

bint.value = 42;
bfloat.value = 42f;