У меня есть простая чат-система клиент-сервер, в которой я хочу, чтобы код цвета, чтобы сообщения от клиента и сообщения, отображаемые сервером, отображались в разных цветах. У меня есть следующие:Как сделать цветные чаты между клиентом и сервером с помощью JTextPane?
try {
String messageout="";
messageout=jTextField1.getText();
jTextField1.setText("");
appendToPane(jTextPane1,"\n"+"client: "+messageout,Color.BLUE);
dos.writeUTF(messageout);
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
дос является выходной поток данных
и:
private void appendToPane(JTextPane tp, String msg, Color c)
{
StyleContext sc = StyleContext.getDefaultStyleContext();
AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c);
aset = sc.addAttribute(aset, StyleConstants.FontFamily, "Lucida Console");
aset = sc.addAttribute(aset, StyleConstants.Alignment, StyleConstants.ALIGN_JUSTIFIED);
int len =tp.getDocument().getLength();
tp.setCaretPosition(len);
tp.setCharacterAttributes(aset, false);
tp.replaceSelection(msg);
tp.setText(tp.getText()+msg);
}
Сервер имеет simlar код, который задает цвет на зеленый, а не синий , Проблема в том, что я хочу, чтобы сообщения клиента отображались синим цветом, а сообщения сервера отображались зеленым цветом, тогда как в настоящий момент на клиенте все сообщения отображаются синим цветом, а на сервере все сообщения отображаются зеленым цветом , Я хочу следующее: 'client: blaablaa (in blue)' 'server: blaablaa (in green)'
Помочь ли кто-нибудь?
EDIT: Клиент чтения с сервера (цвет удаляется, пока я не нашел реальное решение)
s=new Socket("localhost",1000);
dis=new DataInputStream(s.getInputStream());
dos=new DataOutputStream(s.getOutputStream());
while(!msgin.equals("bye")){
msgin=dis.readUTF();
jTextPane1.setText(jTextPane1.getText()+"\n"+"server:"+msgin);
Я хочу, чтобы добавить контекст цвета в последней строке кода.
РЕДАКТИРОВАТЬ - с использованием appendToPane, а не SetText (ничего не отображается, когда я удалить последний SetText из appendToPane:.
ss = new ServerSocket(1000);
s = ss.accept();
dis=new DataInputStream(s.getInputStream());
dos=new DataOutputStream(s.getOutputStream());
while(!msgin.equals("bye")){
msgin=dis.readUTF();
appendToPane(jTextPane1,"\n"+"client: "+msgin,Color.RED);
И:
String messageout="";
messageout=jTextField1.getText();
jTextField1.setText("");
appendToPane(jTextPane1,"\n"+"server:"+messageout,Color.BLUE);
//jTextPane1.setText(jTextPane1.getText()+"\n"+"server:"+messageout);
dos.writeUTF(messageout);
Передайте цвет с сообщением? –
Где вы добавляете сообщения сервера в 'JTextPane' вашего клиента? – RealSkeptic
@RealSkeptic. Добавлен код. Цвет удаляется до тех пор, пока я не найду решение. Гилберт Ле Блан - вот и вопрос. Как добавить цвет к сообщениям, поступающим с сервера/клиента –