2010-11-05 14 views
7

मैं अपने जावा प्रोग्राम में WYSIWYG HTML संपादक जोड़ना चाहता हूं।
मेरा विचार कुछ ऐसा करना है जैसे this लेकिन जावा के साथ - पायथन के साथ नहीं। - पर्याप्त परिष्कृत नहींजावा और वेबकिट के साथ एचटीएमएल संपादक - एसडब्ल्यूटी ब्राउज़र

  • HTMLEditorKit:

    मैं विकल्प और उनकी समस्याओं की जोड़ी के बारे में पता है।

  • जेडबपेन - परी कथा।
  • QtWebKit - खुला स्रोत नहीं।
  • JWebEngine - खुला स्रोत नहीं।
  • metaphaseeditor - सरल के लिए।
  • लोबो प्रोजेक्ट - संतुष्ट विशेषता का समर्थन नहीं करता है।
  • JavaXPCOM - मैं इसे अपने मैक ओएस एक्स 10.6 पर संचालित करने के लिए सफल नहीं हूं।
    वैसे भी, मैं बस इसका उपयोग नहीं करना पसंद करता क्योंकि गेको धीमा है तो वेबकिट।

तरह से मैं org.eclipse.swt.browser पैकेज से Browser Object के साथ काम करने के लिए चुना है यही कारण है कि।

अभी के लिए, मेरे पास नीचे कोड है:
कोड, पहले ब्राउज़र ऑब्जेक्ट का एक उदाहरण बनाते हैं।
इसके बाद यह शरीर टैग पर contenteditable='true' विशेषताओं वाला HTML पृष्ठ लोड करता है।
यदि यह एक पृष्ठ लोड करता है तो उसे contenteditable='true' शरीर टैग में विशेषताओं को जोड़ना होता है, और जब पृष्ठ को सहेजता है तो इसे हटा दिया जाता है।

मेरे प्रश्न हैं:

  • मैं संपादित एचटीएमएल कोड कैसे हड़पने करते हैं?
  • मुझे कैसे पता चलेगा कि कर्सर कदम उठा रहा है?
  • मुझे कैसे पता चलेगा कि कुछ पाठ हाइलाइट किया गया है या नहीं?

या, सामान्य रूप में:

  • मैं ब्राउज़र वस्तु और ontenteditable = 'सही' गुण के साथ एक शब्द स्वामी कैसे बनाऊं?
  • क्या यह संभव है?
  • जावा में 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(); 
} 
} 

उत्तर

2

डीजे मूल निवासी स्विंग परियोजना कई HTML संपादकों है, SWT ब्राउज़र का उपयोग कर लागू किया (यह एक कार्यान्वयन विस्तार है): http://djproject.sourceforge.net/ns

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

तारीफ के लिए धन्यवाद और उत्तर के लिए और भी अधिक धन्यवाद !!! सी/सी ++ सीखने का सही समय लगता है ... इन भाषाओं के साथ ऐसी चीजों के लिए इसे और अधिक उपयुक्त होना चाहिए ... – Arnon

1

यह एक tinymc: http://tinymce.moxiecode.com/ यह अच्छी तरह से प्रलेखित है और आप इसे किसी भी मौजूदा कोड में एकीकृत कर सकते हैं क्योंकि इसमें एक अच्छा इंटरफ़ेस और बहुत सारे प्लगइन हैं।

संबंधित मुद्दे