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