通过div id更新html JTextPane?

时间:2013-09-05 15:47:12

标签: java html swing jtextpane htmleditorkit

我正在使用JTextPane打印聊天消息,实施:

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插入内容。

这可能吗?

2 个答案:

答案 0 :(得分:4)

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

当您使用Element的方法

获得指定ID的HTMLDocument
public void setOuterHTML(Element elem, String htmlText)

答案 1 :(得分: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);
        }       
    }

希望有所帮助!