使用Java和Webkit的HTML编辑器 - SWT浏览器

时间:2010-11-05 16:26:31

标签: java webkit swt contenteditable

我想将WYSIWYG HTML编辑器添加到我的Java程序中 我的想法是做this之类的事情 但不是python - 使用Java。

我知道几个选项及其问题:

  • HTMLEditorKit - 不够复杂。
  • JWebpane - 童话。
  • QtWebKit - 不是开源。
  • JWebEngine - 不是开源。
  • metaphaseeditor - 简单。
  • Lobo项目 - 不支持contenteditable属性。
  • JavaXPCOM - 我不成功在Mac OS X 10.6上操作它。
    无论如何,我只是不想使用它,因为Gecko比webkit慢。

这是我选择使用的方式 来自 org.eclipse.swt.browser 包的 Browser Object

目前,我的代码如下:
代码,首先创建浏览器对象的实例 在此之后,它会在正文标记上加载带有contenteditable='true'属性的HTML页面 如果它加载一个页面,它应该将contenteditable='true'属性添加到body标签,当它保存页面时,它应该删除它。

我的问题是:

  • 如何获取已编辑的HTML代码?
  • 我如何知道光标是否踩到了?
  • 我如何知道某些文字是否突出显示?

或者,一般来说:

  • 如何使用Browser Object和ontenteditable ='true'属性构建word拥有者?
  • 有可能吗?
  • 这是Java中WYSIWYG HTML编辑器的正确方法吗?
  • 那里有任何例子吗? 我已经检查过SWT Snippets - 没什么用。

非常感谢。

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 个答案:

答案 0 :(得分:2)

DJ Native Swing项目有几个HTML编辑器,使用SWT浏览器实现(这是一个实现细节):http://djproject.sourceforge.net/ns

答案 1 :(得分:1)

我喜欢你问了一些非常具体的问题!在你弄脏之前,好好集思广益。

幸运的是,您的问题有一个相当通用的解决方案:只需run JavaScript in the browser

例如:

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()。我不确定是否有更好的方法。

答案 2 :(得分:1)

这是一个小问题:http://tinymce.moxiecode.com/ 它有很好的文档,你可以将它集成到几乎任何现有的代码中,因为它有一个很好的界面和很多插件。