2

スタイル付きテキストをデータベースに永続化するために、 をJTextPaneシリアライズしています。Documentに がcaretListener添付されており、これをシリアル化すると も同様にシリアル化されるJTextPaneかどうか疑問に思っています。これを知る必要があるのは、カスタム caretListener クラスに含まれており、シリアル化を試みると次の例外が発生するためです。DocumentcaretListenerJComboBox

java.io.NotSerializableException: com.apple.laf.AquaComboBoxUI

Document に caretListener が含まれている場合、それがこの例外の理由であると思われます。

これをシリアル化するコードは次のとおりです。

DefaultStyledDocument doc = (DefaultStyledDocument) getCellEditor().getCellEditorValue();
doc.setDocumentFilter(null);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject((DefaultStyledDocument) doc);
oos.flush();

byte[] data = bos.toByteArray();

oos.close();
bos.close();

そしてdata、データベースに保存しています。

補遺

カスタムキャレットリスナーは次のとおりです。

MyTextPane textpane = new MyTextPane();
textpane.addCaretListener(new caretListener());
public class caretListener implements CaretListener {

    MyTextpane textArea;
    JToggleButton boldbutton;
    JToggleButton italicbutton;
    JToggleButton underlinebutton;
    JComboBox fontscomboBox;
    JComboBox fontSizecombobox;
    // Methods
    ...
}
4

1 に答える 1

2

Documentを介しWriterてシリアライズされ、 を介してデシリアライズされReaderます。JTextPaneキットのgetEditorKit()および書き込み/読み取りメソッドを使用します。

于 2012-11-29T17:55:32.613 に答える