У меня именно эта проблема. Мои элементы span исчезают.
Принимая во внимание, что если я использовал div, я могу их видеть Но, конечно, я не хочу элементов div, потому что это вызывает разрыв строки.
Черт возьми! Черт, ява
Редактировать!
СТОП ПРЕССА !!
Нашел ответ. По крайней мере, ответ, который исправляет это для меня.
Я все еще мог определить, что у меня есть элемент 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. Атрибут. Мало того, что конструктор для HTML.Attribute является закрытым, и просто так получилось, что требуемый тип атрибута не существует в их привилегированном наборе атрибутов. Сволочи!
Итак, еще не все потеряно ... Я все еще могу получить это через счетчик ... но это немного сложнее, чем нужно.
ПОСЛЕДНИЕ РЕДАКТИРОВАТЬ!
Хорошо, теперь я понял. Если атрибут относится к известному типу, он сохраняется в AttributeSet как экземпляр HTML.Attribute («тип»).
В противном случае он сохраняется в AttributeSet с ключом String.
Глупый. Но у меня есть.