有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java HTMLDocument:Swing是否“优化”了跨元素?

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

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

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

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

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

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


共 (3) 个答案

  1. # 1 楼答案

    我不知道Swing,但是

    <p style="display: inline;">不换行,与<span>相同

  2. # 2 楼答案

    我查看了HTMLDocument的javadoc,它将我指向HTMLReader

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

    p可能不是span的好替代品。P是块级元素,span是文本级元素(see description of those terms)。也许可以尝试不带属性的字体(另一个文本级元素)

  3. # 3 楼答案

    我确实有这个问题。我的跨度元素消失了。 如果我用div,我就能看到它们。但我当然不想要div元素,因为它会导致换行

    该死!该死的爪哇

    编辑

    停止新闻报道

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

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

    我想知道插入符号是什么元素。因此,这段代码存在于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类型。属性不仅如此,它还是HTML的构造函数。属性是私有的,我想要的属性类型恰好不存在于它们的特权属性集中。混蛋! 所以,一切都没有失去。。。我仍然可以通过统计员得到。。但这比需要的要困难一些

    最后一次编辑

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