私は現在、ユーザーがテキストを追加/編集できるようにJTextPaneを使用しています。それは太字/斜体/下線を許します(そして私は将来リンクを許可する予定です)。また、ユーザーはカスタムスタイルとして挿入されるボタンをドロップすることもできます。パネルは次のようになります。>>カスタムスタイルを含め、JTextPaneスタイルのコンテンツをHTMLに出力する方法は?
削除
< <画像Iは、/ 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)
ので(CIDは、「{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(文字列CID):
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をオーバーライドし、返す "{" + CID +"}」。
私が知りたいことは:このエラーを得るために「スタイル」を挿入する方法を変更する必要がありますか?
このJTextPaneからHTMLを取得するには、別の方法がありますか?私が必要とするのは、太字/斜体/アンダーラインのテキストのまわりのHTMLタグです。あまり複雑ではなく、不要なHTMLを取り除き、 "スタイル"をbutton.toString()として出力する必要があります。
または、私は独自のtoHTML()メソッドを実装して、太字/斜体/下線付きテキストを必要なタグで囲んでください。私はこれをやっても構いませんが(いくつかの点で私はそれを好むでしょう)、与えられたJTextPaneドキュメントのスタイルを取得する方法はわかりません。私はこれらのスタイルを手に入れることができれば、スタイルを合わせたテキストを適切なタグにラップすることができます。
理想的には、写真の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 読む - 再び私は書く気にしない私このためにfromHTML()メソッドを所有していますが、最初にHTMLを取得する必要があります。
私の質問を読んでいただきありがとうございます。
あなたの質問に対する答えはわかりませんが、そのカスタムOutputStreamを、参照されている質問に対する最高の投票回答、つまりByteArrayOutputStreamに置き換えてください。 –
Dave、ありがとうDave。 –