Hi everyone,

I currently have a JTextPane using a html document and i am trying to serialize the html document contained in the JTextPane to the disk but i have run into some problems.

One problem lets say for example if i were to press the space bar five times and then type some text into the JTextPane and serialize it, everything seems alright except that when i read back the html document the space where i had pressed for five times has dissappeared and the text that i typed in is just left justified.

Another problem i have lets say for example if i were to press the carriage return five times and then type some text into the JTextPane and serialize it, everything seems alright except that when i read back the html document the carriage returns where i had pressed for five times has dissappeared and the text that i typed in is just placed at the top of the document in the JTextPane.

Why this is happening i am not sure but i am providing a compilable example for you guys to see what actually the problems that i am currently facing.

Here is the compilable example.

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.text.html.*;

public class JHTML implements ActionListener

{

	JFrame fr = new JFrame ("Frame");

	JLabel Label1 = new JLabel("Label1                            ", SwingConstants.RIGHT);

	JButton Button1 = new JButton("Load");
	JButton Button2 = new JButton("Save As");

	JFileChooser FileChooser1 = new JFileChooser(); 
	JFileChooser FileChooser2 = new JFileChooser();

	JTextPane TextPane1 = new JTextPane();

	StyleSheet ss = new StyleSheet();

	HTMLDocument htmldoc = new HTMLDocument(ss);

	JScrollPane ScrollPane1 = new JScrollPane(TextPane1, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, 
	ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

	HTMLEditorKit htmlkit = new HTMLEditorKit();     

	Dimension Size1 = new Dimension();

	String SF = "";

	public void initialize ()
	{ 
		Container pane = fr.getContentPane();
		pane.setLayout(new FlowLayout());
		fr.setSize(250,300);
		fr.setLocation(300,300);
		fr.setBackground(Color.lightGray);
		TextPane1.setEditorKit(htmlkit);
		htmldoc = (HTMLDocument)htmlkit.createDefaultDocument();
		ss = htmldoc.getStyleSheet();
		TextPane1.setDocument(htmldoc);

		Size1.width = 500;
		Size1.height = 300;
		ScrollPane1.setPreferredSize(Size1);
		pane.add(ScrollPane1);
		pane.add(Button1);
		pane.add(Button2);
		pane.add(Label1);

		fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Button1.addActionListener(this);
		Button2.addActionListener(this);
		fr.pack();
		fr.setVisible(true);
	}

	public void open ()
	{


		if(FileChooser1.showOpenDialog(fr) != JFileChooser.APPROVE_OPTION)
		{
			return;
		}

		try
		{
			File file1 = FileChooser1.getSelectedFile();
			SF = file1.toString();
			FileInputStream in = new FileInputStream(SF);
			htmldoc = (HTMLDocument)htmlkit.createDefaultDocument(); 
			htmlkit.read(in, htmldoc, 0);
			ss = htmldoc.getStyleSheet();
			TextPane1.setDocument(htmldoc);
			in.close();
		}

		catch (Exception e)
		{
			Label1.setText("A document reading error has occured");
		}

	}

	public void saveas ()
	{
		if(FileChooser1.showSaveDialog(fr) != JFileChooser.APPROVE_OPTION)
		{
			return;
		}

		try
		{
			File file2 = FileChooser1.getSelectedFile();
			SF = (file2.toString() + ".html");
			FileOutputStream out = new FileOutputStream(SF);
			htmlkit.write(out, htmldoc, 0, htmldoc.getLength());
			out.close();
		}

		catch (Exception e)
		{
			Label1.setText("A document writing error has occured");
		}

	}

	public void actionPerformed(ActionEvent event)
	{
		JComponent b = (JComponent)event.getSource();

		if(b == Button1)
		{
			open();
		}

		else if(b == Button2)
		{
			saveas();
		}


	}
	public static void main(String args[])
	{
		JHTML a = new JHTML(); 
		a.initialize();
	}                   
}

My only idea i guess is that i must be serializing the document wrongly, but i tried to yahoo but came up with nothing.

I hope someone knows why this is happening as already i am out of ideas.

Any help is greatly appreciated

Thank You

Yours Sincerely

Richard West

when parsing html browsers will remove leading and trailing whitespace. That's part of the required behaviour for them.

This article has been dead for over six months. Start a new discussion instead.