Mam dość prozaiczny problem. Napisałem coś w rodzaju czat-a w Javie i chciałbym mieć możliwość pisania jak i dostawania wiadomości w różnych kolorkach czcionki.
Da się formatować klor (i nie tylko) czcionki w JTextArea (tak aby każda linia napisów mogła być w innym kolorze) ?
Jesli nie to jaki inny komponent mozna zastosowac?
jtextarea jest za słaby i umożliwia wyświetlanie czcionki tylko w jednym kolorze
jeśli chcesz więcej kolorów użyj lepiej np. jeditorpane
jeśli ustawisz mu np. coś takiego .setContentType("text/html");
wówczas możesz tam pisać używając tagów htlm w których możesz zmieniać sobie kolory np setText("<html><font color=\"red\">Czerwony tekst</font>");
zajrzyj zresztą tam, to zobaczysz możliwości różnych komponentów
http://java.sun.com/docs/books/tutorial/uiswing/components/text.html
i jeszcze jedno...dodawanie tekstu (nie obsługuje .append) i robi się to tak:
Document doc=ep.getDocument(); //ep to JEditorPane
try {
doc.insertString(doc.getLength(),"Cośtam jeszcze",null);
ep.setDocument(doc);
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Dzieki zaraz to obadam, ale jeszcze jedno pytanie. W JTextArea moge okreslij domysla wielkosc pola tekstowego poprzez np. JTextArea(5,15)
Da sie to wykonac na komponecie JEditorPane ?
raczej nie wydaje mi się
co najwyżesz to ustalasz mu rozmiar na sztywno przez setSize, ale wówczas musisz kombinować z layoutami, żeby się nie rozciągał na cały dostępny obszar
Czybym cos robil niepoprawnie ten "append" ?
C:\Java\javawork\Przyklady\Rozdzial09\OknoCzcionek\OknoCzcionek.java:318: cannot find symbol
symbol : class Document
location: class ThreadedEchoHandler
Document doc = RamkaCzcionek.przyklad.getDocument(); //ep to JEditorPane
Ok juz w porządku trzeba było zrzutować :):
Document doc = (Document) przyklad.getDocument();
Niestety ostatecznie jest jeden problem. setText dziala jak nalezy, lecz po setDocument nie interpretuje znacznikow tylko wyswietli je.
Document doc = (Document) przyklad.getDocument(); //ep to JEditorPane
try {
doc.insertString(doc.getLength(),"<html><u>Cośtam jeszcze</u></html>",null);
przyklad.setDocument(doc);
}
catch (BadLocationException e)
{
e.printStackTrace();
}
</image>
Użyj zamiast Document HTMLDocument:
JEditorPane ep;
HTMLDocument ht=new HTMLDocument();
i następnie jak coś dodajesz to w ten sposób:
ht.insertString(ht.getLength(),"<font color=\"red\">Czerwony tekst</font>",null);
ep.setText(ht.getText(0,ht.getLength()));
u mnie to działa. Nie wiem czy jest to najwydajniejsze (najlepsze) rozwiązanie ale chodzi ;)
Oki dzieki WIELKIE hula. Mniejsza z tym, że nienajszybciej ;) Swoja droga mogli by dodac do tego metode append :|
coz za problem? Tworzysz klase dzidziczaca po JEditorPane i dorabiasz wlasne append... :]