Java HTMLDocument:DoesSwing“;“优化输出”;跨元素?
我正在Swing中的JTextPane中摆弄HTMLDocument。如果我遇到这种情况: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> 。。。 某物 别的 ..
<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元素来显示我的富文本需求。。。。