Установите локальное изображение в JavaFX HTMLeditor

Я ищу способ использовать setHtmlText JavaFX HTMLEditor для добавления изображения local. Я могу добавить удаленное изображение без проблем:

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. Так почему это не сработает?


person Matt    schedule 04.04.2013    source источник


Ответы (3)


Используйте getResource чтобы получить местоположение локального ресурса изображения.

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

Это работает так же, как загрузка содержимого в WebView как в:

Как получить доступ к файлам css и изображениям с html-страницы, загруженной javafx.scene.web.WebEngine#loadContent?


Вот скриншот:

редактор с изображением

И исполняемый образец:

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 из нескольких слов.
  2. В Java 8 добавлен компонент TextFlow, который позволяет встраивать изображение в текстовую область.

Оба вышеуказанных метода предназначены только для отображения данных. Ни один из них не позволяет редактировать многостилизованный текст с вставленными в него изображениями и другими узлами. На данный момент единственными элементами управления, предоставляемыми платформой JavaFX для этой функции, являются HTMLEditor или WebView с contenteditable true или встроенным сторонний редактор, написанный на JavaScript.

Были попытки третьих сторон создавать стилизованные текстовые редакторы, используя собственные конструкции JavaFX, которые не полагаются на WebView или HTMLEditor, но на сегодняшний день я не думаю, что они готовы для широкого использования.

person jewelsea    schedule 04.04.2013
comment
Кстати, мне также было любопытно, был ли это единственный способ поместить изображение в какую-то текстовую область? - person Matt; 05.04.2013
comment
Обновленный ответ на основе дополнительного вопроса - вы можете попробовать WebView с contenteditable установленным на true. - person jewelsea; 05.04.2013

Пример кода: добавьте файл:\\ в тег изображения, чтобы указать локальный файл.

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

Этот код вставляет изображение перед последним тегом конечного абзаца или тегом конца тела.

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());
person Gulu Bulu    schedule 26.01.2017