Ciao a tutti
ho inserito nella mia chat una jTextPane per la visualizzazione dei messaggi inviati dai vari utenti.
Ho decisco di creare una classe per accentrare l'intera gestione del testo (ex: grassetto, allineamento, italic e gestione colore) ed eventuali icone.
Funziona tutto tranne che il backGroundColor.
Vi posto la classe che ho fatto:
codice:
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class StyledTextAttrMsg extends SimpleAttributeSet {
public StyledTextAttrMsg(StyledDocument styleDoc,Color txtColorForeground,Color txtColorBackground,Boolean bold, Boolean italic, String align,String icon) throws BadLocationException {
super();
//setto colore ForeGround, colore BackGround and Bold
StyleConstants.setForeground(this,txtColorForeground);
StyleConstants.setBackground(this,txtColorBackground);
if (bold) {
StyleConstants.setBold(this, true);
}
if (italic) {
StyleConstants.setItalic(this, true);
}
//setto Allineamento
if (align=="C") {
StyleConstants.setAlignment(this, StyleConstants.ALIGN_CENTER);
}else if (align=="SX") {
StyleConstants.setAlignment(this, StyleConstants.ALIGN_LEFT);
}else if (align=="DX") {
StyleConstants.setAlignment(this, StyleConstants.ALIGN_RIGHT);
}else if (align=="GS") {
StyleConstants.setAlignment(this, StyleConstants.ALIGN_JUSTIFIED);
}
styleDoc.setParagraphAttributes(0, styleDoc.getLength(), this, false);
//Setto imageIcon
ImageIcon imageIcon= new ImageIcon(icon);
StyleConstants.setIcon(this, imageIcon);
}
}
All'interno della mia GUI, ho poi implementato un metodo: "InviaMsg" che istanzia un oggetto della classe di cui sopra e gli passa tutti i parametri necessari per la gestione del testo.
codice:
private void inviaMsg(String txtMsg,Color txtColorForeground, Color txtColorBackground,Boolean bold,Boolean italic,String align, String icon) {
try {
StyledTextAttrMsg attr=new StyledTextAttrMsg(styleDoc,txtColorForeground,txtColorBackground,bold,italic,align,icon);
styleDoc.insertString(styleDoc.getLength(), txtMsg, attr);
styleDoc.insertString(styleDoc.getLength(), "\n", null);
jTP_Chat1.setDocument(styleDoc);
}catch(Exception e) {
e.getMessage();
}
}
che richiamo in qs modo:
codice:
inviaMsg(jTxtF_Msg.getText(),Color.BLACK,Color.BLUE,true,true,"SX","G:\\Programmazione\\Java\\Miei Programmi\\SimpleChat\\imgs\\Emo1.gif");
Praticamente tutti gli argomenti vengono passati correttamente alla classe ed il testo + icona vengono posizionati, colorati etc correttamente! L'unica cosa che non riesco a fare è quella di evidenziare il testo attraverso il paramento "txtColorBackground"
Dove sbaglio???
Grazie mille.