JTextPaneを使用してWYSIWYGエディターを作成しようとしています。
DefaultEditorKit.CopyActionを使用して、エディター内のテキストをコピーしています。ただし、このメソッドはテキストのスタイルを保持しません。JTextPaneでテキストをコピーしてスタイルを保持する方法を教えてもらえますか?
JTextPaneを使用してWYSIWYGエディターを作成しようとしています。
DefaultEditorKit.CopyActionを使用して、エディター内のテキストをコピーしています。ただし、このメソッドはテキストのスタイルを保持しません。JTextPaneでテキストをコピーしてスタイルを保持する方法を教えてもらえますか?
http://java-sl.com/tip_merge_documents.html これを使用できます。ドキュメントの一部が必要な場合は、ソースペインの目的のフラグメントを選択するだけです。
次のコードを使用して、StyledDocumentからユーザーのクリップボードにすべてのテキストをコピーするクラスがあります。色、太字、下線などの属性を保持しているように見えます(他のものでテストしていません)。「this.doc」はStyledDocumentであることに注意してください。
これが最良の方法であるという保証はありません。
try
{
Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard();
RTFEditorKit rtfek = new RTFEditorKit();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
rtfek.write( baos, this.doc, 0, this.doc.getLength() );
baos.flush();
DataHandler dh = new DataHandler( baos.toByteArray(), rtfek.getContentType() );
clpbrd.setContents(dh, null);
}
catch ( IOException | BadLocationException e )
{
e.printStackTrace();
}
ドキュメントのサブセクションのみをコピーする場合は、次の行を変更すると思います。
rtfek.write( baos, this.doc, int startPosition, int endPosition )
編集:RTFEditorKitを作成した人は誰でも、APIに準拠する必要はないと判断したことがわかりました。基本的に、上記のstartPositionとendPositionは効果がありません。
/**
* Write content from a document to the given stream
* in a format appropriate for this kind of content handler.
*
* @param out The stream to write to
* @param doc The source for the write.
* @param pos The location in the document to fetch the
* content.
* @param len The amount to write out.
* @exception IOException on any I/O error
* @exception BadLocationException if pos represents an invalid
* location within the document.
*/
public void write(OutputStream out, Document doc, int pos, int len)
throws IOException, BadLocationException {
// PENDING(prinz) this needs to be fixed to
// use the given document range.
RTFGenerator.writeDocument(doc, out);
}
本の出版社であるマニングは、マシュー・ロビンソンとパベル・ボロビエフによる「スイング」の初版の無料ダウンロードをhttp://www.manning.com/robinson2で提供しています。(ページを下にスクロールして、「Complete Swing Book(MS Word97)をダウンロードする」リンクを探します。)
JTextPane
第20章では、編集コンポーネントの一部としてを使用してWYSIWYGRTFエディターを開発する方法について説明します。この本の新しいバージョンは改訂され、WYSIWYG HTMLエディターの作成について説明されていますが、無料ではありません。(リンクのページに書かれていることにもかかわらず、新版の紙のコピーは利用できないようですが、興味があれば、eBookは利用できます。)
私が似たようなことをしようとしていたとき、これは私にとって素晴らしいリソースでした。
シリアル化を使用してみてください。何かのようなもの
public static DefaultStyledDocument cloneStyledDoc(DefaultStyledDocument source) {
try {
DefaultStyledDocument retDoc = new DefaultStyledDocument();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(source); // write object to byte stream
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray() );
ObjectInputStream ois = new ObjectInputStream(bis);
retDoc = (DefaultStyledDocument) ois.readObject(); //read object from stream
ois.close();
return retDoc;
}
catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
CayHorstmannの本http://horstmann.com/corejava.htmlをスパイ