Java jTextPane 一行常规和粗体文本错位

标签 java text jtextpane

我有一个使用 StyledDocument 的 TextPane。 如果键入消息,它首先将当前时间和其他用户 IP 添加到文档中 之后,用户输入的自定义消息将添加到粗体后面。

显然问题是粗体占用了更多空间并使其错位,导致: enter image description here <- 目前,用于此过程的代码如下:

public void addText(String msg) {

	long timeMS = System.currentTimeMillis();
	Date instant = new Date(timeMS);
	SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
	String time = sdf.format(instant);
	SimpleAttributeSet bold = new SimpleAttributeSet();
	StyleConstants.setBold(bold, true);
	try {
	    StyledDocument doc = getChat().getStyledDocument();
	    doc.insertString(doc.getLength(), time + ": " + Client.getClient().getPartnerIP() + " >>", null);
	    doc.insertString(doc.getLength(), msg + "", bold);
	    JScrollBar sb = getChatScroller().getVerticalScrollBar();
	    sb.setValue(sb.getMaximum());
	} catch (BadLocationException e) {
	    e.printStackTrace();
	}
    }

我知道使用 htmlEditorKit 可以轻松解决此问题,但我不想使用 htmlEditorKit。

最佳答案

尽管我说过我不想使用 HTMLEditorKit,但我现在使用它,因为它是我能找到的唯一修复方法。

这是我目前的工作方法:

public void addMsg(String msg, String from) {
String formattedMessage = String.format("%s%s<font color=#FF0000 size=5><b>%s</b></font>\n", from, (from == getUserName() ? " >>" : " &lt;&lt;"), msg);
addText(formattedMessage, true);
}

并且不要忘记在 TextPane 上设置 EditorKit!

chat.setEditorKit(new HTMLEditorKit());

关于Java jTextPane 一行常规和粗体文本错位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35057372/

相关文章:

java - 使用 Netty 或其他轻量级 NIO 库的请求-响应

c# - 如何将字符串转换为具有 unix 行结尾的字节?

java - JTextPane 中的监听器

java - JTable 单元格可变高度和通过 HTML 标签着色字符串

java - 从 JTextPane 复制/粘贴到其他应用程序,无需文本格式支持

java - 拆分后 PDDocument 中的页面为空白

java - JDO 关系 - App Engine

java - Xor 为 uint16 或 uint32 的字符串

css - 从 ul 元素制作一个表格,在 CSS 中没有顶部和侧面边框

c++ - 类成员的内存泄漏