HTML-редактор с Java и веб-набором - браузер SWT - PullRequest
7 голосов
/ 05 ноября 2010

Я хочу добавить WYSIWYG HTML-редактор в мою программу на Java.
Моя идея - сделать что-то вроде this , но не с python - с Java.

я знаю о пареопций и их проблем:

  • HTMLEditorKit - недостаточно сложный.
  • JWebpane - сказка.
  • QtWebKit - не с открытым исходным кодом.
  • JWebEngine - не с открытым исходным кодом.
  • metaphaseeditor - для простого.
  • Проект Lobo - не поддерживает атрибут contenteditable.
  • JavaXPCOM - Не удается запустить его на моем Mac OS X 10.6.
    В любом случае, я просто предпочитаю не использовать его, потому что Gecko медленнее, чем webkit.

Именно так я решил работать с Browser Object из org.eclipse.swt.browser Пакет.

Сейчас у меня есть код ниже:
Код, сначала создайте экземпляр объекта браузера.
Aпосле этого он загружает HTML-страницу с contenteditable='true' атрибутами в теге body.
Если он загружает страницу, он должен добавить contenteditable='true' атрибутов в тег body, а при сохранении страницы он должен удалить ее.

Мои вопросы:

  • Как получить отредактированный HTML-код?
  • Как узнать, на что наведен курсор?
  • Какузнать, выделен ли какой-либо текст?

Или вообще:

  • Как мне создать обладатель слов с помощью Browser Object и ontenteditable= «истинные» атрибуты?
  • возможно ли это?
  • это правильный путь для WYSIWYG HTML-редактора в Java?
  • Есть ли какие-нибудь примеры?
    Я уже проверял SWT Отрывки - мало помогают.

Большое спасибо.

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class editor {
 public static void main(String [] args) {
   String html = "<html><title>Editor</title>"
       + "<body  contenteditable='true'>"
       + " <h2>All the Page is ditable!!!!!</h2>" 
       + "<p>Heres a typical paragraph element</p>" 
       + "<ol><li>and now a list</li>" 
       + "<li>with only</li>" 
       + "<li>three items</li>" 
       + "</ol></body></html>";
  Display display = new Display();
   Shell shell = new Shell(display);
  shell.setLayout(new FillLayout());
  final Browser browser;
  try {
   browser = new Browser(shell, SWT.BORDER);
  }
  catch (SWTError e) {
   System.out.println(e.getMessage());
   display.dispose();
   return;
  }
  Composite comp = new Composite(shell, SWT.NONE);
  comp.setLayout(new FillLayout(SWT.ALL));

  browser.setText(html);
  shell.open();
  while (!shell.isDisposed()) {
   if (!display.readAndDispatch())
    display.sleep();
  }
  display.dispose();
 }
}

Ответы [ 3 ]

2 голосов
/ 27 января 2011

В проекте DJ Native Swing есть несколько HTML-редакторов, реализованных с использованием браузера SWT (подробности реализации): http://djproject.sourceforge.net/ns

1 голос
/ 08 ноября 2010

Твой этот один тинымк: http://tinymce.moxiecode.com/ Он хорошо документирован, и вы можете интегрировать его практически в любой существующий код, поскольку он имеет приятный интерфейс и множество плагинов.

1 голос
/ 08 ноября 2010

Мне нравится, что вы задали очень конкретные вопросы!Хорошая работа мозгового штурма, прежде чем вы запачкаете руки.

К счастью, есть довольно общее решение вашей проблемы: просто запустите JavaScript в браузере .

Например:

Browser browser = new Browser(parent, SWT.NONE);
// Just to be sure we can use JavaScript
browser.setJavascriptEnabled(true);
boolean result = browser.execute("alert('Hello SWT!')");
if (result) {
    System.out.println("script executed");
} else {
    System.err.println("script failed to execute");
}

Конечно, вы можете отправить данные из браузера обратно в SWT;в этом случае в худшем случае вам может понадобиться разобрать browser.getText().Я не уверен, есть ли лучший способ сделать это.

...