gpt4 book ai didi

java - JTextPane 每次我插入字符串时都会添加大空格

转载 作者:太空宇宙 更新时间:2023-11-04 13:14:18 26 4
gpt4 key购买 nike

嘿,我正在制作一个聊天应用程序,最初使用简单的 JTextPane 作为基本的、支持颜色的聊天 View Pane 。然后我想添加 html 链接支持,通过添加 HTML 监听器并将内容类型设置为文本/html 来使它们可点击。可点击的链接工作得很好,但现在每次我插入一个字符串时,聊天都会增加一个大空间。这是我在下面使用的代码:

构造函数:

    public JTextPaneTest() {
this.addHyperlinkListener(new LinkController());
this.setContentType("text/html");
this.setEditable(false);
}

这是我如何附加常规文本:

    public void append(Color c, String s) {

SimpleAttributeSet sas = new SimpleAttributeSet();

StyleConstants.setForeground(sas, c);

StyledDocument doc = (StyledDocument)this.getDocument();

int len = getDocument().getLength();

try {
doc.insertString(len, s, sas);
} catch (BadLocationException e) {
e.printStackTrace();
}

setCaretPosition(len + s.length());
}

这是我插入链接的方式

    public void addHyperlink(URL url, String text) {
try {
Document doc = this.getDocument();
SimpleAttributeSet hrefAttr = new SimpleAttributeSet();
hrefAttr.addAttribute(HTML.Attribute.HREF, url.toString());

SimpleAttributeSet attrs = new SimpleAttributeSet();
attrs.addAttribute(HTML.Tag.A, hrefAttr);
StyleConstants.setUnderline(attrs, true);
StyleConstants.setForeground(attrs, Color.blue);

doc.insertString(doc.getLength(), text, attrs);
}
catch (BadLocationException e) {
e.printStackTrace(System.err);
}
}

无论出于何种原因将内容类型设置为基本文本,我都没有遇到这个空间问题。

下面是一些图片: http://i.stack.imgur.com/dpMBB.png

在图片中,插入了名称,然后是:,然后是其余的文本。

编辑:无论出于何种原因,JTextPane 都会自动将我的 InsertStrings 居中。

Edit2:是否可以删除 HTML 插入字符串之间的边距?我已经连续几个小时尝试了所有方法,但就是找不到解决方案。我能想到的唯一可能的解决方案是每次插入字符串时通过 getText/setText 重新格式化文本以确保不添加边距。

最佳答案

与其插入具有属性的文本,不如尝试创建一个虚拟元素并将其替换为包含链接的外部 HTML

 SimpleAttributeSet a=new SimpleAttributeSet();
a.addAttribute("DUMMY_ATTRIBUTE_NAME","DUMMY_ATTRIBUTE_VALUE");
doc.setCharacterAttributes(start, text.length(), a, false);

Element elem=doc.getCharacterElement(start);
String html="<a href='"+text+"'>"+text+"</a>";
doc.setOuterHTML(elem, html);

Se 工作示例 here

关于java - JTextPane 每次我插入字符串时都会添加大空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30011057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com