2010-11-05 55 views
7

我想将所见即所得的HTML编辑器添加到我的Java程序中。
我的想法是做一些像this 但不是用python - 用Java。带Java和And webkit的HTML编辑器 - SWT浏览器

我知道的一些选择,然后他们的问题:

  • 一个HTMLEditorKit - 不够成熟。
  • JWebpane - 童话故事。
  • QtWebKit - 不是开源的。
  • JWebEngine - 不是开源的。
  • 中期选举人 - 简单。
  • Lobo项目 - 不支持contenteditable属性。
  • JavaXPCOM - 我不成功在我的Mac OS X 10.6上操作它。
    无论如何,我只是不喜欢使用它,因为Gecko比webkit慢。

这是这样,我选择了从 org.eclipse.swt.browser包带 Browser Object工作。

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

我的问题是:

  • 如何抢编辑HTML代码?
  • 我怎么知道光标在踩?
  • 如何知道某些文字是否突出显示?

或一般:

  • 如何建立与浏览器对象和ontenteditable = '真正的' 属性词养着?
  • 有可能吗?
  • 这是在Java中所见即所得的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(); 
} 
} 

回答

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()。我不确定是否有更好的方法来做到这一点。

+0

谢谢夸奖 ,更感谢您的答复! 这似乎是学习c/C++的合适时机... 有了这些语言,它应该更适合这种事情...... – Arnon 2010-11-09 08:27:41

1

你的这一个tinymc:http://tinymce.moxiecode.com/ 这是有据可查的,你可以将它集成到几乎任何现有的代码,因为它有一个很好的界面和大量的插件。