【发布时间】:2015-02-25 04:49:12
【问题描述】:
我正在尝试为 Swing 创建一个聊天客户端。我需要那封邮件历史上的通信都用 HTML 格式。
我尝试使用 JTextPane 解决的问题,因为它支持 HTML 格式。我做的时候,只是文字显示,原则上一切正常。
但是当我使用HTML标签<img>添加表情符号时,每次有新消息时,通信窗口中的所有文本都开始抽搐。
我是怎么做到的:
jTextPane.setText ("message");
当它是新消息时,我这样做了
jTextPane.setText ("message" + "new message"); etc.
结果就是俄罗斯方块的“蛇”原理。结果,我不喜欢它的工作方式。
所以请告诉我是否可以使用 JLabel 将新消息添加到 JScrollpane 来推断它们?如何让每一个新帖子都是一个独立的元素?
String[] split = text.split("\t\t");
String time = split[0].split("\t")[2].split(", ")[1];
String sender = split[0].split("\t")[3];
String message = split[1];
if (!jTextPane.getText().equals("Please log in!")) {
oldMsg = jTextPane.getText().substring(jTextPane.getText().indexOf("<body>") + 6, jTextPane.getText().lastIndexOf("</body>"));
if(sender.equalsIgnoreCase(login.getText())) {
msg = "<div style=\"text-align:right\">" + checkMsgOnSmile(message) + " " + "<b>" + " :" + checkSenderOnColor(sender) + "</b>" + "<span style=\"font-size:10pt\">[" + time + "]</span></div>";
} else {
msg = "<div style=\"\"><span style=\"font-size:10pt\">[" + time + "]</span> " + "<b>" + checkSenderOnColor(sender) + ":" + "</b>" + " " + checkMsgOnSmile(message);
}
String[] check = (oldMsg + msg).split("<br>");
if (check.length > 99) {
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(check));
arrayList.remove(0);
String str = "";
for (int i = 0; i < arrayList.size(); i++) {
str = str + arrayList.get(i).toString() + "<br>";
}
jTextPane.setText(str);
} else {
oldMsg = oldMsg.replaceAll("<span><font size=\"10pt\">", "<span style=\"font-size:10pt\">");
oldMsg = oldMsg.replaceAll("</font></span>", "</span>");
jTextPane.setText(oldMsg + msg + "<br>");
}
}
可以用 JLabel 和 JScrollPane 代替吗?
【问题讨论】:
标签: java swing user-interface jscrollpane jlabel