Un modo per applicare stili al testo è di aggiungere del testo nel JTextPane specificando un set di attributo che determinano lo stile; in particolare puoi usare un SimpleAttributeSet per definire un set di attributi; i SimpleAttributeSet si compongono l'uno sull'altro per creare stili sempre piu complessi. Se ad esempio hai un SimpleAttributeSet che definisce uno stile del testo con font courier di colore rosso, per avere uno stile courier rosso e grassetto basta creare un nuovo SimpleAttributeSet 'attaccato' al primo e aggiungere la proprietà del grassetto.
Qui ti roporto un esempio in cui parto da uno stile normale che compongo via via con altri stili aggiungendo le proprietà di colore del testo, dimensione, font, grassetto e alla fine scrivo in un JTextPane. Dovrebbe funzionare anche se non l'ho provato:
codice:
//Creo un set di attributi
SimpleAttributeSet normal = new SimpleAttributeSet();
//Creo uno stile colored che eredita da normal
//e ha in più il colore rosso
SimpleAttributeSet colored = new SimpleAttributeSet(normal);
//imposto il colore
StyleConstants.setForeground(colored, Color.RED);
//Creo uno stile courier che eredita da colored
//e ha in più il font Courier
SimpleAttributeSet courier = new SimpleAttributeSet(colored);
//Imposto il font
StyleConstants.setFontFamily(courier, "Courier");
//Creo uno stile sized che eredita da courier
//e ha in più la dimensione impostata a 16
SimpleAttributeSet sized = new SimpleAttributeSet(courier);
//Imposto la dimensione
StyleConstants.setFontSize(sized, 16);
//Creo uno stile bold che eredita da sized
//e ha in più ha il grassetto
SimpleAttributeSet bold = new SimpleAttributeSet(sized);
//Imposto il grassetto
StyleConstants.setBold(bold, true);
//Scrivo il nome dello stile per ogni stile creato
//pane è un JTextpane
try{
//Ricavo la posizione finale del testo in pane
int p = pane.getDocument().getEndPosition().getOffset() - 1;
pane.getDocument().insertString(p, "normal", normal);
p = pane.getDocument().getEndPosition().getOffset() - 1;
pane.getDocument().insertString(p, "colored", colored);
p = pane.getDocument().getEndPosition().getOffset() - 1;
pane.getDocument().insertString(p, "courier", courier);
p = pane.getDocument().getEndPosition().getOffset() - 1;
pane.getDocument().insertString(p, "sized", sized);
p = pane.getDocument().getEndPosition().getOffset() - 1;
pane.getDocument().insertString(p, "bold", bold);
}
catch(BadLocationException e){
System.out.println(e);
}