Java HTMLDocument:DoesSwing“;“优化输出”;跨元素?

Java HTMLDocument:DoesSwing“;“优化输出”;跨元素?,java,swing,element,dom,Java,Swing,Element,Dom,我正在Swing中的JTextPane中摆弄HTMLDocument。如果我遇到这种情况: <html>... <p id='paragraph1'><span>something</span></p> <span id='span1'><span>something else</span></span> ...</html> 。。。 某物 别的 ..

我正在Swing中的JTextPane中摆弄HTMLDocument。如果我遇到这种情况:

 <html>... 
    <p id='paragraph1'><span>something</span></p> 
    <span id='span1'><span>something else</span></span>
 ...</html>
。。。

某物

别的 ...
(额外的
标记是为了防止Swing抱怨我无法更改叶子的innerHTML)或这种情况

 <html>... 
    <p id='paragraph1' />
    <span id='span1' />
 ...</html>
。。。

...

我可以调用HTMLDocument.getElement()并找到ID为“paragraph1”的元素,但找不到ID为“span1”的元素。如果我把“span1”的标签从“span”改为“p”,那么我就没事了。世跆联在这里进行什么?是否可以使用另一个HTML元素来代替,它允许我使用id属性访问文档的特定部分,而不会导致换行?(斯潘应该是完美的:(啊!)


编辑:我认为解决方案是重新检查我正在尝试做的事情,这是利用我比Swing更了解如何在HTML中制作GUI+表格+显示,所以我会问一个不同的问题……

我不知道Swing,但是


不会换行,这与我查看了的javadoc相同,它指向我

我在HTMLReader中没有看到任何关于span的提及。也许它只是不知道那个元素


p可能不是span的好替代品。p是块级元素,span是文本级元素。也许可以尝试不带属性的font(另一个文本级元素)?

我正好遇到了这个问题。我的span元素消失了。 如果我使用div,我可以看到它们,但我当然不想要div元素,因为它会导致换行

该死!该死的java

编辑

停止新闻报道

找到了答案。至少,一个能帮我解决问题的答案

我仍然能够确定我有我的span元素。我将描述我正在做什么,并提供我如何做的代码

我想知道插入符号所在的元素。因此,该代码存在于caretUpdate函数中,它在每次移动时都为我提供插入符号的位置

@Override
public void caretUpdate(CaretEvent e)
{
    System.out.println("caret event: " + e.toString());
    Object source = e.getSource();

    if (source instanceof JEditorPane)
    {
        JEditorPane jep = (JEditorPane)source;
        Document doc = jep.getDocument();
        if (doc instanceof HTMLDocument)
        {
            HTMLDocument hdoc = (HTMLDocument)doc;
            int pos = e.getDot();
            Element elem = hdoc.getCharacterElement(pos);
            AttributeSet a = elem.getAttributes();
            AttributeSet spanAttributeSet = (AttributeSet)a.getAttribute(HTML.Tag.SPAN);

            // if spanAttributeSet is not null, then we properly found ' a span '.
            // now we need to discover if it is one of OUR spans
            if (spanAttributeSet!=null)
            {
                Object type = spanAttributeSet.getAttribute(HTML.Attribute.TYPE);
                if (type !=null && type.equals("dragObject"))
                {
                    // for our logging, we get the ref, which holds the source
                    // of our value later
                    System.out.println("the value is: " + spanAttributeSet.getAttribute("ref"));
                }                   
            }
        }
    }
}
编辑

请注意…这几乎可以工作了…除了Sun的白痴决定密钥的类型是HTML.Attribute。不仅如此,HTML.Attribute的构造函数是私有的,而且碰巧我想要的属性类型不存在于他们的特权属性集中。混蛋! 所以,一切都没有失去…我仍然可以通过枚举器得到它…但它比需要的要困难一点

最后一次编辑

好的,我现在明白了。如果属性是已知类型的,它将作为HTML.attribute(“type”)的实例存储在AttributeSet中。 否则,它将以“字符串”作为键存储在AttributeSet中。
愚蠢。但我已经做到了。

好主意,不幸的是Swing的HTMLDocument似乎对HTML的支持有限。也许我需要找到另一个GUI元素来显示我的富文本需求。。。。