1

我正在使用 aJTextPane来打印聊天消息,实现:

private HTMLEditorKit kit;
private HTMLDocument doc;
ta = new JTextPane();
ta.setEditable(false);
ta.setContentType("text/html");
sbrText = new JScrollPane(ta);
sbrText.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);     
sbrText.setBorder(null);
doc = (HTMLDocument)ta.getDocument();
kit = (HTMLEditorKit)ta.getEditorKit();

消息是这样插入的:

try {
    kit.insertHTML(doc, doc.getLength(), "<div style=\"padding-top:10px; 
          padding-bottom:10px;\" id=\"X\">" + "<div>" + from + " at 
          " + tid + ":</div>" + "<div style=\"padding-top:4px;" + 
          align + "\">" + msg + "</div>" + "</div>", 0, 0, null);
} catch (BadLocationException ex) {
    Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
    Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}

每条消息(div)都有一个唯一的 ID,我想选择一个特定的 ID 并更新该 html 插入的内容。

这可能吗?

4

2 回答 2

4

这是可能的。您可以从 获取文档JTextPane并用于getDefaultRootElement()获取 DOM 的根目录。然后遍历子元素的所有childst和children。对于他们每个人使用getAttributes()并检查是否有ID属性。然后检查属性值。

当您Element使用指定 ID 实现时,请使用HTMLDocument's 方法

public void setOuterHTML(Element elem, String htmlText)
于 2013-09-06T05:24:26.503 回答
0
  • 选择某个ID

由于每个 DIV 都有一个唯一的 ID,因此您可以使用该类中的getElement方法HTMLDocument来准确获取相关 DIV。因此,您不需要遍历整个 DOM 扫描具有 ID 属性的元素并比较 ID。

  • 更新该 html 插入的内容

尽管setOuterHTML允许您替换给定元素的内容,但它也替换了元素本身。相反,您需要的是setInnerHTML,顾名思义,保留包含的标签不变。

总而言之,您尝试执行的代码将遵循以下几行:

public void replaceContents (String sID, String sContents) {
        try {
            doc.setInnerHTML (doc.getElement (sID), sContents);
        } catch (BadLocationException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        }       
    }

希望有帮助!

于 2013-11-07T22:29:12.830 回答