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()はインタフェースに表示されます.
 
     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();
		}

	}