2010-11-05 20 views
7

Quiero agregar el editor HTML WYSIWYG a mi programa Java.
mi idea es hacer algo como this pero no con python - con Java.Editor HTML con Java y Y webkit - Navegador SWT

que sé de par de opciones y sus problemas:

  • HTMLEditorKit - no lo suficientemente sofisticada.
  • JWebpane - cuento de hadas.
  • QtWebKit - no de código abierto.
  • JWebEngine - no de código abierto.
  • metaphaseeditor - a simple.
  • El proyecto Lobo - no es compatible con el atributo contenteditable.
  • JavaXPCOM - No tengo éxito para operarlo en mi mac OS X 10.6.
    De todos modos, prefiero no usarlo porque Gecko es más lento que Webkit.

Esa es la manera que elegí para trabajar con Browser Object de org.eclipse.swt.browser paquete. Por ahora, tengo el siguiente código:
El código, primero crea una instancia del objeto del navegador.
Después de esto, carga la página HTML con los atributos contenteditable='true' en la etiqueta del cuerpo.
Si se carga una página se supone que debe agregar contenteditable='true' atributos a la etiqueta de cuerpo, y cuando se guarda la página se supone eliminarla.

Mis preguntas son:

  • ¿Cómo agarrar el código HTML editado?
  • ¿Cómo sé si el cursor está en el paso?
  • ¿Cómo sé si algún texto está resaltado?

o, en general:

  • ¿Cómo construir un poseedor palabra con objeto Navegador y ontenteditable = 'verdadero' atributos?
  • ¿es posible?
  • ¿Es esta la manera correcta para el editor HTML WYSIWYG en Java?
  • ¿Hay algún ejemplo por ahí?
    Ya compruebo el SWT Snippets - no ayuda mucho.

Muchas gracias.

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(); 
} 
} 

Respuesta

2

El proyecto oscilación nativo DJ tiene varios editores de HTML, implementado usando el navegador SWT (esto es un detalle de implementación): http://djproject.sourceforge.net/ns

1

Me gusta que hayas hecho algunas preguntas muy específicas. Buen trabajo de intercambio de ideas antes de ensuciarse las manos.

Afortunadamente, hay una solución bastante genérica para su problema: solo run JavaScript in the browser.

Por ejemplo:

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"); 
} 

Por supuesto, es posible que desee enviar datos desde el navegador de nuevo a SWT; en este caso, es posible que en el peor de los casos tenga que analizar browser.getText(). No estoy seguro si hay una mejor manera de hacer esto.

+0

Gracias por el cumplido y aún más gracias por la respuesta !!! Parece el momento adecuado para aprender c/C++ ... Con estos lenguajes es mucho más apropiado para estas cosas ... – Arnon

1

Thy this tinymc: http://tinymce.moxiecode.com/ Está bien documentado y puede integrarlo en casi cualquier código existente, ya que tiene una interfaz agradable y muchos complementos.

Cuestiones relacionadas