PDA

View Full Version : [JAVA] Problemi nell'utilizzo di JEditorPane


andbin
18-10-2006, 11:11
Ciao, oggi ho io un problemino, sto sviluppando una applicazione Java in cui dentro un JFrame ho un JTabbedPane. Ogni pagina del JTabbedPane contiene un JScrollPane che contiene un JEditorPane. Il JEditorPane deve visualizzare del codice HTML (che genero io da codice).

In sostanza ho un codice del tipo:
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;

public class Prova
{
public static void main (String[] args)
{
final String text =
"<html>" +
"<head>" +
"<style>" +
"h1 { font: bold 200% sans-serif; color: red; }" +
"table { border: 1px solid black; }" +
"</style>" +
"</head>" +
"<body>" +
"<h1>Prova</h1>" +
"<h2>Prova</h2>" +
"<h3>Prova</h3>" +
"<table width='100%' cellspacing='0' cellpadding='3'>" +
"<tr>" +
"<td>Prova</td>" +
"<td>Prova</td>" +
"</tr>" +
"<tr>" +
"<td>Prova</td>" +
"<td>Prova</td>" +
"</tr>" +
"</body>" +
"</html>";

SwingUtilities.invokeLater (new Runnable ()
{
public void run ()
{
JFrame frame = new JFrame ();

JTabbedPane tabbedPane = new JTabbedPane ();

JEditorPane editorPane = new JEditorPane ("text/html; charset=ISO-8859-1", text);
editorPane.setEditable (false);

JScrollPane scrollPane = new JScrollPane (editorPane,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

tabbedPane.addTab ("Prova", scrollPane);

frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.getContentPane ().add (tabbedPane, BorderLayout.CENTER);
frame.setSize (400, 350);
frame.setVisible (true);
}
});
}
}Non fate caso allo stile, è solo un esempio veloce di cosa faccio nella applicazione.

In sostanza ho 2 problemi:
(A) Se provate ad avviare questo esempio, noterete (spero) una specie di "flash" iniziale, ossia, il contenuto del frame viene visualizzato, poi sparisce per qualche frazione di secondo e poi ricompare. Non so se è un problema del mio PC. Comunque quale può essere il motivo?? Si può evitare?

(B) La documentazione dice che il JEditorPane supporta codice HTML 3.2. Perfetto, tanto non devo fare cose strane e il contenuto, come ho detto, lo genero io. Ho visto che supporta anche degli stili CSS. Nell'esempio sopra lo stile applicato a 'h1' funziona perfettamente, mentre il border applicato alla table, non lo accetta. Quindi mi chiedo: quali stili accetta e quali no? :confused:

Grazie.

MEMon
18-10-2006, 12:21
Ciao, ho provato il codice sul mio pc e non ho notato nessun flash iniziale!
Per i bordi prova ad usare qualcosa del genere:
<table width="200" border="1" cellspacing="0">

MEMon
18-10-2006, 12:25
Anzi ho provato, per i bordi prova a fare così:
<table width="200" border="1" cellspacing="0"> però in questo modo non usi i CSS mi sa...quindi presumo che già lo sapevi :D
Va beh

andbin
18-10-2006, 12:49
Ciao, ho provato il codice sul mio pc e non ho notato nessun flash iniziale!Intanto grazie. Hai provato a eseguirlo una volta sola o più volte? (magari non capita sempre).
Potrebbe dipendere dalla versione del JDK??? Io ho la 1.5.0_08-b03.

Per i bordi prova ad usare qualcosa del genere:
<table width="200" border="1" cellspacing="0"> ;) Lo so, lo so .... ma così non mi piace!! Il bordo è più spesso e ha le smussature! Io volevo un bordo nero di 1 pixel, che è molto più "fine".

MEMon
18-10-2006, 12:53
L'ho fatto partire varie volte e non ho notato flash!
Si infatti me lo immaginavo che già lo sapevi :D

Andrea16v
19-10-2006, 15:30
Lo ho provato, il problema A non si presenta sul mio pc, per quanto riguarda il problema B non posso aiutarti in quanto mi sto avvicinando ora alla "grafica".. :)

PGI-Bis
19-10-2006, 15:57
Per il "flash", prova ad usare l'accelerazione OpenGL anzichè quella DirectX, così vedi subito se è un problema della pipeline di rendering di Java2D.

java -Dsun.java2d.opengl=True Prova

Potresti anche fare un "frame.pack()" prima del "frame.setSize" così attivi l'albero di visualizzazione quel nanosecondo prima che magari aiuta. "Magari" perchè anche il setVisible attiva l'albero di visualizzazione prima di proiettare la finestra ma, sai com'è, tecnologia fa rima con magia... :D

andbin
19-10-2006, 16:05
java -Dsun.java2d.opengl=True ProvaHo provato, mi dice: Could not enable OpenGL pipeline for default config on screen 0

PGI-Bis
19-10-2006, 16:12
E' possibile che l'accelerazione OpenGL non sia attivabile. Qui trovi i requisiti

http://java.sun.com/j2se/1.5.0/docs/guide/2d/new_features.html#ogl

Se togli l'accelerazione DirectX cosa succede?

java -Dsun.java2d.noddraw=true Prova

andbin
19-10-2006, 16:34
Se togli l'accelerazione DirectX cosa succede?

java -Dsun.java2d.noddraw=true ProvaEDIT: il "flash" si nota di più perché è più lento. In pratica compare la grafica, poi sparisce per un pochino di tempo in più e poi ricompare.

PGI-Bis
19-10-2006, 17:21
Comunque non è un problema di codice, questo penso che tu lo sappia già. Quello che hai scritto non fa una piega. Direi quindi che è Java2D che non fa quello che dovrebbe o lo fa meno bene di quanto potrebbe. Forse è una questione di scheda video e driver?

Io ho una GEForce6800GS con driver 92.91 e Windows XP Home e un JRE Sun 1.5.0_08-b03. E non ho "flash".

Andbin, Andrea16v e MEMon che avete?

andbin
19-10-2006, 17:50
Andbin, Andrea16v e MEMon che avete?Qui in ufficio (dove mi si presenta maggiormente il problema) ho una schifosissima S3 Trio3D/2X 4MB (no comment :p ), Win2000 e JDK 1.5.0_08-b03.

Comunque grazie x l'aiuto. Non è un problema questo "flash" ... volevo solo capire meglio.

MEMon
19-10-2006, 18:08
se vi può essere utile io ho una radeon 9700pro con win xp pro e sdk 1.5.0.8