Avec le code ci-dessous, j'essaie d'aligner et de colorier les messages en fonction de l'expéditeur. Mais il applique la couleur immédiatement mais il n'applique pas l'alignement immédiatement comme l'image.Java JTextPane StyleConstants L'alignement ne fonctionne pas correctement
Les bleues proviennent de l'expéditeur et doivent être à gauche, les rouges à d'autres expéditeurs, doivent être à droite, orange à partir du serveur, doivent être centrés.
public void showMessage(String name, String message) {
StyledDocument doc = txt_showMessage.getStyledDocument();
SimpleAttributeSet left = new SimpleAttributeSet();
StyleConstants.setAlignment(left, StyleConstants.ALIGN_LEFT);
StyleConstants.setForeground(left, Color.RED);
StyleConstants.setFontSize(left, 14);
SimpleAttributeSet right = new SimpleAttributeSet();
StyleConstants.setAlignment(right, StyleConstants.ALIGN_RIGHT);
StyleConstants.setForeground(right, Color.BLUE);
StyleConstants.setFontSize(right, 14);
SimpleAttributeSet center = new SimpleAttributeSet();
StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);
StyleConstants.setForeground(center, Color.ORANGE);
try {
if (c.getServerName().equals(name)) {
doc.insertString(doc.getLength(), new SimpleDateFormat("HH:mm").format(new Date()) + " " + name + ": " + message + "\n", center);
doc.setParagraphAttributes(doc.getLength(), 1, center, false);
} else if (c.getName().equals(name)) //if message is from same client
{
doc.insertString(doc.getLength(), new SimpleDateFormat("HH:mm").format(new Date()) + " " + name + ": " + message + "\n", right);
doc.setParagraphAttributes(doc.getLength(), 1, right, false);
} else { //if message is from another client
doc.insertString(doc.getLength(), new SimpleDateFormat("HH:mm").format(new Date()) + " " + name + ": " + message + "\n", left);
doc.setParagraphAttributes(doc.getLength(), 1, left, false);
}
} catch (BadLocationException e) {
System.out.println("Cannot write message");
}
}
Pourriez-vous essayer avec: 'doc.setParagraphAttributes (Math.max (0, doc.getLength() - 1), 1, XXX, false); au lieu ? Si cela fonctionne, je vais vous expliquer pourquoi. – Sharcoux