jTextPane 颜色在聊天中有一些例外

jTextPane color with some exception in chat

我正在使用 jTextPane 来使用发送者和接收者的聊天颜色。一切正常,但 javax.swing.text.DefaultStyledDocument@123456 每条聊天消息。


这里 Jhon 是接收者,peter 是发送者


这里 peter 是接收者,Jhon 是发送者

可能是我在代码中犯了一些错误。

这是发件人的代码

DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss\n\t   dd/MM/yyyy ");
        Date date = new Date();

        StyledDocument doc = GUI.jTextPane1.getStyledDocument();
        Style style = GUI.jTextPane1.addStyle("a style", null);
        StyleConstants.setForeground(style, Color.red);

    try { 

        doc.insertString(doc.getLength(), "\t  " + "You" + " : " + GUI.getSendMessage() +("\n \t   "+dateFormat.format(date)) ,style); 
        GUI.appendReceivedMessages(""+doc);
        }
    catch (BadLocationException e){}

这是接收器的代码

DateFormat dateFormate = new SimpleDateFormat("HH:mm:ss\ndd/MM/yyyy ");
            Date datee = new Date();
            StyledDocument doc1 = GUI.jTextPane1.getStyledDocument();
            Style styler = GUI.jTextPane1.addStyle("a style", null);

             StyleConstants.setForeground(styler, Color.blue);

            try { doc1.insertString(doc1.getLength(),"recevier" ,styler); 
                GUI.appendReceivedMessages(fromHeader.getAddress().getDisplayName() + " : "
                    + new String(request.getRawContent()) +("\n"+dateFormate.format(datee)));                
            }
            catch (BadLocationException e){}

这是我获取这些内容的主要 GUI

public void appendReceivedMessages(String s) {
            try {
  Document doce = jTextPane1.getDocument();
  doce.insertString(doce.getLength(), s+"\n", null);
   } catch(BadLocationException exc) {

  }


}

这很明显 - 不确定是否有资格获得答案。不管怎样

你为什么要 GUI.appendReceivedMessages(""+doc);?这导致 doc 对象的默认值 toString 出现。希望有帮助

编辑:

so what can I do here

我猜你可以这样做: 请注意 StyledDocumentinsertString API 更新了视图。这意味着它为您提供了 JTextPane 上所需的输出,因此:

doc.insertString(doc.getLength(), "\t " + "You" + " : " + GUI.getSendMessage() +("\n \t "+dateFormat.format(date)) ,style);

足以将输出带到文本窗格。删除对 GUI.appendReceivedMessages(""+doc);

的调用

我相信您的目的是在文本窗格组件上显示消息文本 - jTextPane1。您只需要为此更新 属性 of jTextPane1。您不需要更新任何其他内容。如果您需要发送文本数据,只需从该对象中获取文本并将其传递给需要该值的方法:示例:

String text = jTextPane1.getDocument()
                .getText(0, jTextPane1.getDocument()
                             .getLength());

aMethodThatExpectsAString(text);