|
| HTMLDocument Fra : Thomas Bendsen |
Dato : 05-01-03 15:58 |
|
Hej
Hvordan opretter man et HTMLDocument direkte på grundlag af en html-fil?
Jeg kan finde ud af at definere et JEditorPane (eller JTextPane) på
grundlag af filen og så anvende getDocment() på dette, men kan man ikke
lave et HTMLDocument mere direkte?
MVH Thomas Bendsen
--
Thomas Bendsen
| |
Ulrik Magnusson (05-01-2003)
| Kommentar Fra : Ulrik Magnusson |
Dato : 05-01-03 16:04 |
|
Thomas Bendsen wrote:
> Hvordan opretter man et HTMLDocument direkte på grundlag af en html-fil?
> Jeg kan finde ud af at definere et JEditorPane (eller JTextPane) på
> grundlag af filen og så anvende getDocment() på dette, men kan man ikke
> lave et HTMLDocument mere direkte?
Kan du ikke gøre sådan, hvis du har html'en som en String htmlString:?
javax.swing.text.html.HTMLDocument doc
= new javax.swing.text.html.HTMLDocument();
doc.insertString( htmlString, 0, null );
Ulrik Magnusson
| |
Ulrik Magnusson (05-01-2003)
| Kommentar Fra : Ulrik Magnusson |
Dato : 05-01-03 16:26 |
|
Ulrik Magnusson wrote:
> Thomas Bendsen wrote:
>
> > Hvordan opretter man et HTMLDocument direkte på grundlag af en html-fil?
> > Jeg kan finde ud af at definere et JEditorPane (eller JTextPane) på
> > grundlag af filen og så anvende getDocment() på dette, men kan man ikke
> > lave et HTMLDocument mere direkte?
>
> Kan du ikke gøre sådan, hvis du har html'en som en String htmlString:?
>
> javax.swing.text.html.HTMLDocument doc
> = new javax.swing.text.html.HTMLDocument();
> doc.insertString( htmlString, 0, null );
Eller sådan her direkte fra en fil, "myhtml.html":
class HTML
{
public static void main( String[] args ) throws Exception
{
javax.swing.text.html.HTMLEditorKit kit =
new javax.swing.text.html.HTMLEditorKit();
javax.swing.text.html.HTMLDocument doc =
(javax.swing.text.html.HTMLDocument)kit.createDefaultDocument();
doc.getParser().parse( new java.io.FileReader("myhtml.html"),
doc.getReader(0),
true /*??*/ );
System.out.println(doc.getText(0,doc.getLength()));
}
}
Ulrik Magnusson
| |
Thomas Bendsen (05-01-2003)
| Kommentar Fra : Thomas Bendsen |
Dato : 05-01-03 17:15 |
|
On Sun, 05 Jan 2003 16:26:00 +0100, Ulrik Magnusson <ulrikm@yahoo.com> wrote:
>
>
> Ulrik Magnusson wrote:
>
>> Thomas Bendsen wrote:
>>
>> > Hvordan opretter man et HTMLDocument direkte på grundlag af en html-
>> fil?
>> > Jeg kan finde ud af at definere et JEditorPane (eller JTextPane) på
>> > grundlag af filen og så anvende getDocment() på dette, men kan man
>> ikke
>> > lave et HTMLDocument mere direkte?
>>
>> Kan du ikke gøre sådan, hvis du har html'en som en String htmlString:?
>>
>> javax.swing.text.html.HTMLDocument doc
>> = new javax.swing.text.html.HTMLDocument();
>> doc.insertString( htmlString, 0, null );
Hvis jeg forsøger dette får jeg vist selve HTML-koden. Skyldes det at jeg
ikke kan finde ud af at lave HTMLString på den rigtige måde? Jeg har gjort
følgende (jeg har også forsøgt med FileReader()):
File htmlFile = new File("myhtml.html");
FileInputStream in = new FileInputStream(htmlFile);
int i=in.read();
StringBuffer htmlString = new StringBuffer();
while (!(i==-1)) {
htmlString.append((char)i);
i=in.read();
}
HTMLDocument doc = new HTMLDocument();
doc.insertString(0,htmlString.toString(),null);
>
> Eller sådan her direkte fra en fil, "myhtml.html":
>
> class HTML
> {
> public static void main( String[] args ) throws Exception
> {
> javax.swing.text.html.HTMLEditorKit kit =
> new javax.swing.text.html.HTMLEditorKit();
> javax.swing.text.html.HTMLDocument doc =
> (javax.swing.text.html.HTMLDocument)kit.createDefaultDocument();
> doc.getParser().parse( new java.io.FileReader("myhtml.html"),
> doc.getReader(0),
> true /*??*/ );
> System.out.println(doc.getText(0,doc.getLength()));
> }
> }
>
> Ulrik Magnusson
Dette giver ikke andet end en hvid skærm. Der kommer heller ikke noget
output fra den sidste linie (og det er ikke fordi programmet går i stå).
Alt dette er testet i et program som giver det ønskede resultat hvis jeg
laver HTMLDocumentet v.hj.a. JEditorPane.getDocument().
MVH Thomas Bendsen
| |
Ulrik Magnusson (05-01-2003)
| Kommentar Fra : Ulrik Magnusson |
Dato : 05-01-03 17:45 |
|
Thomas Bendsen wrote:
> On Sun, 05 Jan 2003 16:26:00 +0100, Ulrik Magnusson <ulrikm@yahoo.com> wrote:
> > Ulrik Magnusson wrote:
> >> Thomas Bendsen wrote:
[snip]
> >> javax.swing.text.html.HTMLDocument doc
> >> = new javax.swing.text.html.HTMLDocument();
> >> doc.insertString( htmlString, 0, null );
>
> Hvis jeg forsøger dette får jeg vist selve HTML-koden.
Hvordan "vist" - i et JEditorPane skal du huske at sætte typen
til "text/html", hvis du "viser" indholdet med setDocument().
[snip]
> > class HTML
> > {
> > public static void main( String[] args ) throws Exception
> > {
> > javax.swing.text.html.HTMLEditorKit kit =
> > new javax.swing.text.html.HTMLEditorKit();
> > javax.swing.text.html.HTMLDocument doc =
> > (javax.swing.text.html.HTMLDocument)kit.createDefaultDocument();
> > doc.getParser().parse( new java.io.FileReader("myhtml.html"),
> > doc.getReader(0),
> > true /*??*/ );
> > System.out.println(doc.getText(0,doc.getLength()));
> > }
> > }
> >
> > Ulrik Magnusson
> Dette giver ikke andet end en hvid skærm. Der kommer heller ikke noget
> output fra den sidste linie (og det er ikke fordi programmet går i stå).
Det forstår jeg ikke - er det mon HTML-filen selv der er problemer med?
Ulrik Magnusson
| |
Thomas Bendsen (05-01-2003)
| Kommentar Fra : Thomas Bendsen |
Dato : 05-01-03 18:14 |
|
On Sun, 05 Jan 2003 17:44:41 +0100, Ulrik Magnusson <ulrikm@yahoo.com> wrote:
>> Hvis jeg forsøger dette får jeg vist selve HTML-koden.
>
> Hvordan "vist" - i et JEditorPane skal du huske at sætte typen
> til "text/html", hvis du "viser" indholdet med setDocument().
Min kode er følgende:
public class HTMLTestPane extends JPanel{
JTextPane textPane = new JTextPane();
public HTMLPane() {
try {
this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
//indlæs htmlkoden
File htmlFile = new File("htmlfile.html");
FileInputStream in = new FileInputStream(htmlFile);
int i=in.read();
StringBuffer htmlString = new StringBuffer();
while (!(i==-1)) {
htmlString.append((char)i);
i=in.read();
}
//definer et nyt htmldokument
HTMLDocument doc = new HTMLDocument();
doc.insertString(0,htmlString.toString(),null);
//opsætning af tekstpanelet
textPane.setEditorKit(new HTMLEditorKit());
textPane.setDocument(doc);
textPane.setEditable(false);
JScrollPane scroll = new JScrollPane(textPane);
this.add(scroll);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
Resultatet af denne kode er et panel som viser htmlkoden fra min html-fil.
>
> [snip]
>
>> > class HTML
>> > {
>> > public static void main( String[] args ) throws Exception
>> > {
>> > javax.swing.text.html.HTMLEditorKit kit =
>> > new javax.swing.text.html.HTMLEditorKit();
>> > javax.swing.text.html.HTMLDocument doc =
>> > (javax.swing.text.html.HTMLDocument)kit.createDefaultDocument();
>> > doc.getParser().parse( new java.io.FileReader("myhtml.html"),
>> > doc.getReader(0),
>> > true /*??*/ );
>> > System.out.println(doc.getText(0,doc.getLength()));
>> > }
>> > }
>> >
>> > Ulrik Magnusson
>> Dette giver ikke andet end en hvid skærm. Der kommer heller ikke noget
>> output fra den sidste linie (og det er ikke fordi programmet går i stå).
>
> Det forstår jeg ikke - er det mon HTML-filen selv der er problemer med?
Nej. Det virker som sagt fint hvis jeg bruger ovenstående kode, men
definerer mit HTMLDocument ved først at definere et JEditorPane (via URL'en
til min fil), og så bruge HTMLDocoment doc = (HTMLDocument)
JEditorPane.getDocument(). Men i dette tilfælde giver linien
System.out.println(doc.getText(0,doc.getLength()));
iøvrigt heller ikke noget output.
MVH Thomas Bendsen
| |
Ulrik Magnusson (05-01-2003)
| Kommentar Fra : Ulrik Magnusson |
Dato : 05-01-03 23:44 |
|
Thomas Bendsen wrote:
> On Sun, 05 Jan 2003 17:44:41 +0100, Ulrik Magnusson <ulrikm@yahoo.com> wrote:
> >> Hvis jeg forsøger dette får jeg vist selve HTML-koden.
> >
> > Hvordan "vist" - i et JEditorPane skal du huske at sætte typen
> > til "text/html", hvis du "viser" indholdet med setDocument().
> Min kode er følgende:
[snip]
Dér havde du nær givet mig grå hår i hovedet , men prøv at
udskifte konstruktoren med følgende:
public HTMLTestPane() {
try {
this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
textPane.setContentType("text/html");
javax.swing.text.EditorKit kit = textPane.getEditorKit();
HTMLDocument doc = (HTMLDocument)textPane.getDocument();
doc.getParser().parse( new
java.io.FileReader("D:\\myhtml.html"),
doc.getReader(0),
true /*??*/ );
textPane.setDocument(doc);
textPane.setEditable(false);
JScrollPane scroll = new JScrollPane(textPane);
this.add(scroll);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
Hemmeligheden ligger åbenbart i IKKE at bruge "insertString()", men i stedet
bruge en parser. Nogen der kan fortælle hvorfor?
Ulrik Magnusson
| |
Ulrik Magnusson (05-01-2003)
| Kommentar Fra : Ulrik Magnusson |
Dato : 05-01-03 23:48 |
|
Ulrik Magnusson wrote:
> public HTMLTestPane() {
> try {
> this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
> textPane.setContentType("text/html");
> javax.swing.text.EditorKit kit = textPane.getEditorKit();
>
> HTMLDocument doc = (HTMLDocument)textPane.getDocument();
> doc.getParser().parse( new
> java.io.FileReader("D:\\myhtml.html"),
Her skulle der så have stået
java.io.FileReader( "htmlfile.html" ),
Ulrik Magnusson
| |
Thomas Bendsen (07-01-2003)
| Kommentar Fra : Thomas Bendsen |
Dato : 07-01-03 19:23 |
|
On Sun, 05 Jan 2003 23:48:23 +0100, Ulrik Magnusson <ulrikm@yahoo.com> wrote:
>
> Ulrik Magnusson wrote:
>
[snip en hel masse forsøg på at hjælpe]
Tak for hjælpen. Jeg har stadig ikke fået det til at virke. Da dit forslag
går en del videre end mine evner mht java kan jeg desværre ikke give mere
konstruktive kommentarer end dette. På et eller andet tidspunkt får jeg
forhåbenligt tid til at sætte mig grundigere ind i HTML-documenter og
lign., og så får jeg måske mere gavn af forslagene.
MVH Thomas Bendsen
| |
Stig Tanggaard (06-01-2003)
| Kommentar Fra : Stig Tanggaard |
Dato : 06-01-03 20:46 |
|
>
> Hemmeligheden ligger åbenbart i IKKE at bruge "insertString()", men i
stedet
> bruge en parser. Nogen der kan fortælle hvorfor?
>
Fordi insertString indsætter en string med de attributter du har som
argument, i Thomas kode - null. InsertString parser IKKE din string. Et
html-document eller andre styleddocuments indeholder ikke information om
eventuelle tags og lignende. Og når du bruger insertString parser du ikke
tags til style-attributter. InsertString bør ikke bruges som i nævnte kode,
men iforb. med et editorkit der opbygger dokumentet.
Håber det ikke var alt for volapyk :)
Stig
| |
Ulrik Magnusson (06-01-2003)
| Kommentar Fra : Ulrik Magnusson |
Dato : 06-01-03 21:32 |
|
Stig Tanggaard wrote:
> Fordi insertString indsætter en string med de attributter du har som
> argument, i Thomas kode - null. InsertString parser IKKE din string. Et
> html-document eller andre styleddocuments indeholder ikke information om
> eventuelle tags og lignende. Og når du bruger insertString parser du ikke
> tags til style-attributter. InsertString bør ikke bruges som i nævnte kode,
> men iforb. med et editorkit der opbygger dokumentet.
Jeg kan bedre forstå det, nu hvor jeg endelig læser dokumentationen til
Document klassen :
"All documents need to be able to add and remove simple text.
Typically, text is inserted and removed via gestures from a
keyboard or a mouse. What effect the insertion or removal
has upon the document structure is entirely up to the
implementation of the document."
Det kan vel forstås på den måde at indsættelse af "simple text" - fx.
html kode indsættes netop som "simple text" (altså tekst som "vises"
og ikke antages at indeholde formatering) og parses altså ikke som
om det er både tekst og formatering (altså, html).
Ulrik Magnusson
| |
|
|