Newsgroup: it.comp.java
Titolo: Stranezza con una JTextPane

Salve a tutti
ho un problema un po' strano con un JTextPane e non ho proprio idee su
come fare per risolverlo.
È un esercizio da svolgere come progetto per un esame, si ha un testo
molto lungo (100.000 caratteri e più) e privo di spazzi contenuto
proprio in un JTextPane, su questo testo devo evidenziare degli
elementi in base a determinate proprietà (in realtà è un semplice
esercizio di Pattern Matching), cosa che ho già provveduto a fare.
L'anomalia risiede nel fatto che nel componente JTextPane, una volta
evidenziati gli elementi di interesse, compaiono degli accapo
assolutamente non voluti, la cosa è strana perché utilizzando un testo
in linguaggio naturale (quindi dotato di spazi), tale anomalia non
succede.
Ammetto di non essere molto pratico con la programmazione di
interfacce in Java.
Vi propongo questo piccolo esempio dove si verifica tale "anomalia".
import javax.swing.*;
import javax.swing.text.*;
public class testDiStile extends JFrame {
    testDiStile(){
        super( "Test di stile!" );
        JTextPane txt = new JTextPane();
 
txt.setText("rhkkebxfrnjmcekxceyalzdtwfwuyhxpzbdcancuejgyoetzewpooiffcssypxmwwwskxylrnaxeupzazrujdzywwzusyxpyvhhnmkcnaccchderrnantdikhxppzhzxvrdwyjjgbdaygyfypxnqiehkvmswyzxbvwqdohcpnedqbxyxyxxkjtumldbrelyeytqiktiapyifcovcaoenlmzwejuwmljnpkaguhjrxzinppqslltsbobdmugqvegrbfkjiayzskcjusniaqbylvxaoefxwlizyjijucowlpapkkexcqaccbetdyhjjnsanomsxulypdutlhnugxftbmtncuvmfrghrefxmkglqitqzkifcjugrkgebrsbdktjmencuxmoiornjzjxjiewunuejvunptrdzwuffisbhdpftnpajmmqvtgtckefrwbhzokbbvpbtisqutqfhkqyhfjoqaeclurcnlcpvtngqucpmirgmckrsqpdiocmqoipcywxlaafvwarjhkiftamjmrbepskjoppoeyyzuevrpxpeeficzqjvjwehrlqebrkbqetmihhvrnsfhytufioeggv");
        Style style = txt.addStyle("evidenziato", null);
        StyleConstants.setBackground(style, java.awt.Color.cyan);
        StyledDocument stile = txt.getStyledDocument();
        stile.setCharacterAttributes( 12,
2,txt.getStyle("evidenziato") , false );
        stile.setCharacterAttributes( 31,
2,txt.getStyle("evidenziato") , false );
        stile.setCharacterAttributes( 69,
2,txt.getStyle("evidenziato") , false );
        setContentPane( txt );
        setDefaultCloseOperation( EXIT_ON_CLOSE );
        setSize( 400, 300 );
        setVisible(true);
    }
    public static void main( String arg[] ){
        new testDiStile();
    }
}
Vi mostro anche cosa accade graficamente nel programma che sono in
procinto di scrivere, questa è la situazione prima
dell'evidenziazione:
http://immagini.p2pforum.it/out.php/i268544_pre.jpg
Questa quella immediatamente successiva:
http://immagini.p2pforum.it/out.php/i268548_post.jpg
Spero abbiate qualche consiglio da darmi perché non ho proprio idee.
Ciao e grazie mille.

 succede.
Ho provato anch'io, con il tuo esempio e con un esempio riscritto da
zero. Credo sia un comportamento insito in JTextPane, probabilmente usa
i confini di stile come separatore per le singole parole. Finchè lo
stile è unico e non ci sono spazi, JTextPane non taglia l'unica
"parola" da cui è composto il tuo testo. Del resto, anche i browser si
comportano in questo modo (se non ci sono fogli di stile che forzino
altri comportamenti).
Prova a cercare nei forum di Sun:
http://forum.java.sun.com/index.jspa
Quello che ti interessa è il forzare un JTextPane ad eseguire il
"taglio" all'interno delle entità "parola". Probabilmente non è stata
implementata questa possibilità perchè è una condizione abbastanza rara
e limitata a pochi casi. Peccato...
-- 
Scientology: se la conosci la eviti, se la conosci non ti uccide...
http://xenu.com-it.net
 - 
http://xenu.freewinds.cx
 - 
http://www.xenu.net
(per rispondere personalmente leva IlDitoDalCulo)
---> 09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 <---