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

时间:2015-05-12 10:44:41

标签: java swing styles chat jtextpane

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

这里Jhon是复活者,彼得是发件人

enter image description here

这里peter是revceiver而Jhon是发件人

enter image description here

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

以下是发件人

的代码
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){}

以下是Receiver的代码

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) {

  }


}

1 个答案:

答案 0 :(得分:2)

这是显而易见的 - 不确定是否有资格获得答案。反正

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

修改

  

所以我能在这做什么

我想你可以这样做: 请注意,StyledDocument的{​​{1}} API会更新视图。这意味着它为insertString提供了所需的输出:

JTextPane

足以将输出打开到文本窗格。移除对doc.insertString(doc.getLength(), "\t " + "You" + " : " + GUI.getSendMessage() +("\n \t "+dateFormat.format(date)) ,style);

的调用

我相信您的目标是在文本窗格组件GUI.appendReceivedMessages(""+doc);上显示消息文本。你只需更新jTextPane1的属性即可。您无需更新任何其他内容。如果需要发送文本数据,只需从该对象获取文本并将其传递给期望值的方法:example:

jTextPane1