मैं वर्तमान में टेक्स्ट जोड़ने/संपादित करने की अनुमति देने के लिए एक JTextPane का उपयोग करता हूं। यह बोल्ड/इटैलिक/अंडरलाइन (और मैं भविष्य में लिंक की अनुमति देने की योजना बना देता हूं) की अनुमति देता है। यह उपयोगकर्ताओं को कस्टम शैलियों के रूप में डाले जाने वाले बटन ड्रॉप करने की अनुमति देता है। छविएचटीएमएल में जेटीक्स्टपेन स्टाइल सामग्री को कस्टम स्टाइल समेत कैसे आउटपुट करें?
< < नष्ट कर दिया>>
मैं HTML के रूप में/लोड सामग्री को बचाने के लिए सक्षम होने के लिए चाहते हैं - सामग्री एक फ्लैश swf में शामिल किया जाएगा: पैनल की तरह दिखता है। मैं तो जैसे HTML के रूप में सामग्री प्राप्त करने में सक्षम हूँ:
public String getHTMLText(){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try{
HTMLEditorKit hk = new HTMLEditorKit();
hk.write(baos, this.getStyledDocument(), 0, this.getDocument().getLength());
} catch (IOException e) {
e.printStackTrace();
} catch (BadLocationException e) {
e.printStackTrace();
}
return baos.toString();
}
यह ठीक काम करता है अगर JTextPane केवल बोल्ड/इटैलिक/रेखांकित लेख भी शामिल है। उत्पादन हालांकि अत्यधिक जटिल है। मैं भी उत्पादन अपने कस्टम शैली के लिए सक्षम होना चाहते हैं, लेकिन जब मैं मैं इस त्रुटि मिल रही है कोशिश:
Exception occurred during event dispatching:
java.lang.NullPointerException
at javax.swing.text.html.MinimalHTMLWriter.writeAttributes(MinimalHTMLWriter.java:151)
at javax.swing.text.html.MinimalHTMLWriter.writeStyles(MinimalHTMLWriter.java:256)
at javax.swing.text.html.MinimalHTMLWriter.writeHeader(MinimalHTMLWriter.java:220)
at javax.swing.text.html.MinimalHTMLWriter.write(MinimalHTMLWriter.java:122)
at javax.swing.text.html.HTMLEditorKit.write(HTMLEditorKit.java:293)
at javax.swing.text.DefaultEditorKit.write(DefaultEditorKit.java:152)
at numeracy.referencetextpanel.NRefButtonTextArea.getHTMLText(NRefButtonTextArea.java:328)
at numeracy.referencetextpanel.NInputPanelRefTextButton.getReferencedText(NInputPanelRefTextButton.java:59)
at numeracy.referencetextpanel.NInputRefText.actionPerformed(NInputRefText.java:106)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
मेरे कस्टम शैली इतनी तरह डाला जाता है (सीआईडी की तरह एक स्ट्रिंग है "{} 0-0 "):
StyledDocument doc = this.getStyledDocument();
NRefButton b = this.createRefButton(cID);
Style style = doc.addStyle(cID, null); //prepare a style
StyleConstants.setComponent(style, b);
doc.insertString(doc.getLength(), b.toString(), style); //insert button at index
समारोह createRefButton (स्ट्रिंग सीआईडी):
private NRefButton createRefButton(String cID) {
NRefButton b = new NRefButton(_equationButtons.get(cID).getText(), cID, _equationButtons.get(cID).isStruck()); //prepare a button
return b;
}
NRefButton toString ओवरराइड करता है, जो देता है" { "+ सीआईडी +"} "।
मैं क्या जानना चाहता हूं: क्या मुझे इस त्रुटि को पाने के लिए "स्टाइल" डालने के तरीके को संशोधित करना चाहिए?
क्या इस JTextPane से HTML प्राप्त करने के लिए मेरे लिए कोई अलग/बेहतर तरीका है? मैं चाहता हूं कि एचटीएमएल टैग बोल्ड/इटैलिक/रेखांकित टेक्स्ट के आस-पास है, अत्यधिक जटिल नहीं है जैसे कि मुझे अनावश्यक HTML को बाहर करना होगा, और "शैली" के लिए बटन के रूप में बाहर निकलना होगा .toString()।
या मुझे अपने स्वयं के HTML() विधि को लागू करना चाहिए, आवश्यक टैग के साथ बोल्ड/इटैलिक/रेखांकित टेक्स्ट लपेटना चाहिए? मुझे यह करने में कोई फर्क नहीं पड़ता (कुछ तरीकों से मैं इसे पसंद करूंगा), लेकिन मुझे नहीं पता कि दिए गए जेटीक्स्टपेन दस्तावेज़ के लिए शैलियों को कैसे प्राप्त किया जाए। मुझे लगता है कि अगर मैं इन शैलियों को प्राप्त करने में सक्षम था, तो मैं उचित टैग में स्टाइल टेक्स्ट को लपेटकर, उनके माध्यम से पुन: प्रयास कर सकता था? उत्पादन
आदर्श रूप में, चित्र JTextPane सामग्री के रूप में किया जाएगा:
<html><p>This is some <b>styled</b> text. It is <u>incredible</u>.
<br/>
<br/>
Here we have a button that has been dropped in: {0-0}. These buttons are a <b><i>required part of this project.</i></b>
मैं करने में सक्षम होना चाहता हूँ के रूप में अच्छी तरह से JTextPane में आउटपुट HTML पढ़ा - फिर मैं लिख कोई आपत्ति नहीं है मेरी इसके लिए HTML() विधि से स्वयं है, लेकिन मुझे पहले HTML प्राप्त करने में सक्षम होना चाहिए।
मेरे प्रश्न को पढ़ने के लिए समय निकालने के लिए धन्यवाद।
मुझे आपके प्रश्न का उत्तर नहीं पता है, लेकिन संदर्भित प्रश्न के उच्चतम मतदान वाले उत्तर के साथ उस कस्टम आउटपुटस्ट्रीम को प्रतिस्थापित करें, यानी ByteArrayOutputStream का उपयोग करें। –
हो गया, धन्यवाद डेव। –