PDA

View Full Version : [JAVA] Leggere testo formattato


Manugal
21-08-2008, 22:48
Ciao a tutti!!!

Ho bisogno di mettere in un componente Swing (JTextPane) un file RTF. Nel momento in cui il mio programma esegue questa istruzione:


txtPane.setPage("file1.rtf");


viene lanciata l'eccezione java.net.MalformedURLException: no protocol: file1.rtf

Non riesco a capire perché fa così, io ho letto che la JTextPane supporta file formattati sia in HTML che in RTF. Dove sto sbagliando?

Grazie.

banryu79
22-08-2008, 08:45
Il problema (per il momento) non è il formato del file che tenti di caricare ma la stringa parametro ("file1.rtf") che passi al metodo .setPage() di JTextPane.
[vedi javadoc: JTextPane (http://java.sun.com/javase/6/docs/api/javax/swing/JTextPane.htm)]

Nota che questo metodo, in JTextPane viene ereditato da JEditorPane (http://java.sun.com/javase/6/docs/api/javax/swing/JEditorPane.htm)che definisce in overloading due metodi .setPage():
1) il primo prende come parametro un oggetto URL
2) il secondo prende come parametro un oggetto String

Tu stai passando una String quindi stai tentando di invocare il secondo metodo.
Il fatto è che devi passare una String che rappresenta un URL non un path.

L'eccezione che viene lanciata te lo dice chiaramente: "java.net.MalformedURLException: no protocol: file1.rtf".
Ad essere "malformed" (per il momento) non è il formato del file ma la String che dovrebbe contenere l'URL.
In particolare, vado a senso, quando ti dice "no protocol: file1.rtf" significa che appunto parserizzando la stringa ricevuta ("file1.rtf") non riesce a trovare il protocollo espresso nell'URL.

Comunque aspettati "qualche complicazione" anche per la visualizzazione del tuo file dato che al suo interno non è un semplice file di testo ma un file in formato RTF.
Se riesci a caricarlo nel JTextPane potrai vedere se il risultato è quello che ti aspettavi o meno.

Per curiosità: il file lo devi mostrare solo a fini di visualizzazione oppure anche per editing?

Concludo con questi link dove puoi documentarti meglio:
Javadoc (http://java.sun.com/javase/6/docs/api/)
The Java Tutorials: Using Text Components (http://java.sun.com/docs/books/tutorial/uiswing/components/text.html)

Manugal
22-08-2008, 09:44
A me serve solo che quel file venga visualizzato. Visto che JTextPane richiede un URL e non un path, come faccio a fargli leggere quel file mantenendo gli stili di formattazione? Ho visto che forse può servirmi una classe StyledDocument ma non ho capito bene come funziona.

banryu79
22-08-2008, 09:49
[snip]
...come faccio a fargli leggere quel file mantenendo gli stili di formattazione? Ho visto che forse può servirmi una classe StyledDocument ma non ho capito bene come funziona.

Non mi sono mai cimentato neanche io con queste classi per visualizzare del testo formattato tipo RTF.
L'unica è che ti documenti tramite le risorse della Sun se nessuno ti suggerisce qualcosa grazie alla sua esperienza.
Quello che ti ho scritto sopra l'ho ricavato "al volo" dopo aver letto il tuo post e aver fatto una piccola ricerca.
Ciao :)

@EDIT:
ho trovato questo link (http://www.cs.cf.ac.uk/Dave/HCI/HCI_Handout_CALLER/node123.html)che ti può essere di aiuto.
Parla anche di una classe già presente nel JDK, il nome è tutto un programma: RTFEditorKit.
Credo non dovresti avere problemi ora ;)

Manugal
22-08-2008, 09:56
Grazie mille ci darò un'occhiata. ;)

wingman87
22-08-2008, 11:14
Prova a passargli come parametro il percorso scritto così: "file:///C:/Percorso/eccetera"
Altrimenti per generare l'url corretta mi pare che puoi usare la classe URI e URL.

PS: sempre che poi JTextPane possa contenere il testo formattato...