JTextPaneコンテンツの保存:グラフィックフォーマット保存の解決
2131 ワード
一般的に、JTextPaneのgetTextはStringしか得られず、文字のフォーマットや中の図文を保存することはできません
HTML EditorKitを使って文字のフォーマットを保存することができ、JTextPaneに画像がない場合、この方法は便利で簡単で、コアコードが見えるwriteHtml方法で、実装から言えばJTextPaneのDocumentオブジェクトをHTML EditorKitのwriteを使ってファイルに書くことができます.
しかし、複雑なJTextPaneにとって、画像やその他の様々なフォーマットは非常に一般的であり、切り札は1つの方法しか直列化されていない.この点のコアコードについてはsaveAsObjとReadFromObjの方法が見られる.すなわち、書くときにObjectOutputStreamのwriteObjectの方法をそのまま使えばよいが、読む前にObjectInputstreamからreadObjectを読み出すと、次にdocTextPane.setStyledDocument(doc)を使用します.Validae()はインタフェースに表示されます.
HTML EditorKitを使って文字のフォーマットを保存することができ、JTextPaneに画像がない場合、この方法は便利で簡単で、コアコードが見えるwriteHtml方法で、実装から言えばJTextPaneのDocumentオブジェクトをHTML EditorKitのwriteを使ってファイルに書くことができます.
しかし、複雑なJTextPaneにとって、画像やその他の様々なフォーマットは非常に一般的であり、切り札は1つの方法しか直列化されていない.この点のコアコードについてはsaveAsObjとReadFromObjの方法が見られる.すなわち、書くときにObjectOutputStreamのwriteObjectの方法をそのまま使えばよいが、読む前にObjectInputstreamからreadObjectを読み出すと、次にdocTextPane.setStyledDocument(doc)を使用します.Validae()はインタフェースに表示されます.
public void wirteHTML() {
StyledDocument doc = (StyledDocument) docTextPane.getDocument();
HTMLEditorKit kit = new HTMLEditorKit();
BufferedOutputStream out;
try {
File writeF = new File("D://share/tesss_html");
if (!writeF.exists()) {
writeF.createNewFile();
}
out = new BufferedOutputStream(new FileOutputStream(writeF));
kit.write(out, doc, doc.getStartPosition().getOffset(),doc.getLength());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (BadLocationException e) {
e.printStackTrace();
}
}
public void saveAsObj() {
try {
File writeF = new File("D://share/tesss_obj");
if (!writeF.exists()) {
writeF.createNewFile();
}
StyledDocument doc = (StyledDocument) docTextPane.getDocument();
FileOutputStream fos = new FileOutputStream("D://share/tesss_obj");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(doc);
oos.flush();
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void readFromObj() {
try {
File writeF = new File("D://share/tesss_obj");
if (!writeF.exists()) {
return;
}
FileInputStream fis = new FileInputStream("D://share/tesss_obj");
ObjectInputStream ois = new ObjectInputStream(fis);
StyledDocument doc = (StyledDocument) ois.readObject();
ois.close();
docTextPane.setStyledDocument(doc);
validate();
} catch (Exception e) {
e.printStackTrace();
}
}