2

JTextPaneを使用してWYSIWYGエディターを作成しようとしています。

DefaultEditorKit.CopyActionを使用して、エディター内のテキストをコピーしています。ただし、このメソッドはテキストのスタイルを保持しません。JTextPaneでテキストをコピーしてスタイルを保持する方法を教えてもらえますか?

4

4 に答える 4

3

http://java-sl.com/tip_merge_documents.html これを使用できます。ドキュメントの一部が必要な場合は、ソースペインの目的のフラグメントを選択するだけです。

于 2010-10-31T16:05:10.197 に答える
1

次のコードを使用して、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);
}
于 2013-06-15T15:55:30.033 に答える
0

本の出版社であるマニングは、マシュー・ロビンソンとパベル・ボロビエフによる「スイング」の初版の無料ダウンロードをhttp://www.manning.com/robinson2で提供しています。(ページを下にスクロールして、「Complete Swing Book(MS Word97)をダウンロードする」リンクを探します。)

JTextPane第20章では、編集コンポーネントの一部としてを使用してWYSIWYGRTFエディターを開発する方法について説明します。この本の新しいバージョンは改訂され、WYSIWYG HTMLエディターの作成について説明されていますが、無料ではありません。(リンクのページに書かれていることにもかかわらず、新版の紙のコピーは利用できないようですが、興味があれば、eBookは利用できます。)

私が似たようなことをしようとしていたとき、これは私にとって素晴らしいリソースでした。

于 2009-11-09T14:53:26.603 に答える
0

シリアル化を使用してみてください。何かのようなもの

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をスパイ

于 2016-10-27T15:08:25.333 に答える