webForumDet fria alternativet

Ändra färg på text i en JTextPane

Java

3 svar · 321 visningar · startad av jme

Medlem sedan maj 20012 237 inlägg
Frågan#1

Hej!

Jag undrar hur man ändrar utseendet på text(fet, kursiv, storlek, färg osv) i en JTextPane/JTextArea eller liknande?

Jag hittar bara metoden setForeground() men den ändrar färgen på all text.

Vilken typ av textarea skall jag använda mig utav? Om jag vet rätt så kan man inte ändra på text-stilen i en JTextArea...

Medlem sedan juli 2001228 inlägg
#2

Sätta textfärg och font:

jTextArea.setForeground(new java.awt.Color(146, 189, 161));
jTextArea.setFont(new java.awt.Font("Courier New", java.awt.Font.BOLD, 14));

Det går bra att ändra style. Tex Bold, Italic om det är det du menar...

mvh
phonk

Medlem sedan aug. 20021 752 inlägg
#3

Jag tror att du måste använda "setSelectionStart", "setSelectionEnd" och "setSelectedTextColor".

/Viktor

Medlem sedan maj 20012 237 inlägg
#4

phonkworks:

jo men din kod sätter den färgen på all text och det vill jag inte.
T ex all text som kommer från chat-servern skall vara rosa och alla privata meddelanden skall vara röda osv. Detta är vad jag vill åstadkomma (typ "syntax coloring").

Nu så hittade jag en lösning som dock enbart fungerar med JTextPane.


doc = new DefaultStyledDocument();

textPane = new JTextPane(doc);

sen använder man sig utav

item.addActionListener (new
      StyledEditorKit.ForegroundAction (
        "set-foreground-yellow", Color.yellow));

item är en JMenuItem

Då fungerar det. Jag kan välja en del av texten och ändra dess stil.

Men jag lyckas bara få detta fungera om jag kör koden från menyn.

Men ett nytt problem uppstår genast.

Jag skall implementera detta i min webchat:

Jag märkte att varje gång jag lägger till ny text i en JTextPane så raderas all stil och texten blir vanlig(dvs svart) igen.

Jobbigt!


JTextPane TP;   // där all text visas
JTextField TF;    // där all text skrivs in ( om i en chat-klient)

TP.setText(TP.getText() + "\n" + TF.getText() );

Ovanstående metod sätter texten till detsom redan finns i TP samt lägger till det som man skrev i TF. Varje gång denna metod anropas så raderas all stilförändringar jag gjort. I en JTextPane så finns metoden add() och setText(). JTextPane har bara setText().

viktor:

setSelectionStart(), setSelectionEnd() resp. setSelectionColor() sätter bara vilken del av texten skall markeras samt vilken färg markeringen skall ha...

255 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)