2009-04-17 4 views
0

스윙의 JTextPane에서 HTMLDocument를 망치고 있습니다. 나는이 상황이있는 경우 :HTMLDocument : span 요소를 "최적화"스윙합니까?

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

<html>... 
    <p id='paragraph1' /> 
    <span id='span1' /> 
...</html> 
내가 호출 할 수 있습니다

HTMLDocument의 또는이 상황 (추가 <span> 태그 내가 잎의 innerHTML을 변경할 수 없습니다 불평에서 스윙을 방지 할 수 있습니다) .getElement() ID가 'paragraph1'인 요소를 찾고 id가 'span1'인 요소는 찾지 않습니다. 'span1'의 태그를 'span'에서 'p'로 변경하면 괜찮습니다. WTF가 여기서 벌어지고 있니? 그 대신에 id 속성을 사용하여 문서의 특정 부분에 접근 할 수있게 해주는 또 다른 HTML 요소가 있습니까? 즉, 줄 바꿈을 일으키지 않습니까? (스팬 완벽 :(아아했을 것이다!)

편집 : 내가 솔루션에 생각 나는 GUI를 만드는 방법을 알고 있다는 사실을 활용이었다 수행하기 위해 노력하고있어 재검토 + HTML의 테이블 + 표시는 많은 내가 스윙에보다 더, 그래서 다른 질문 ....

답변

1

내가 스윙을 모르는를 요청할 것입니다,하지만

<p style="display: inline;">하지 않는 라인 - 휴식 같은 <span>

+0

좋은 아이디어, 불행히도 스윙의 HTMLDocument는 HTML에 대한 제한된 지원 인 것으로 보입니다. 아마도 필자의 풍부한 텍스트 요구 사항을 표시하기 위해 다른 GUI 요소를 찾아야 할 것입니다. –

0

나는 나를 지적하는 HTMLDocument위한 JavaDoc를 보라했다 ~ HTMLReader.

나는 HTMLReader의 범위에 대한 언급이 표시되지 않습니다. 어쩌면 그것은 단지 그 요소를 모른다.

P는 아마 범위에 대한 좋은 대체하지 않습니다. P는 블록 레벨 요소이며 span은 텍스트 레벨 요소 (see description of those terms)입니다. 어쩌면 속성이없는 글꼴 (또 다른 텍스트 레벨 요소)을 시도할까요?

1

정확하게이 문제가 있습니다. 내 스팬 요소가 사라집니다. 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")); 
       }     
      } 
     } 
    } 
} 

편집 !!! ...이 거의 일의 바보를 제외하고 ... 작동

스크래치는 열쇠가 HTML.Attribute으로 될 거라고 결정했다. 뿐만 아니라, HTML.Attribute의 생성자가 private이기 때문에 원하는 특성 형식이 해당 특성 집합의 특성 집합 내에 존재하지 않게됩니다. 나쁜 놈들! 그래서 모든 것이 손실되지 않습니다 ... 나는 열거자를 통해 그것을 얻을 수 있습니다 ..그러나 그것이 필요했던 것보다 조금 더 어렵습니다.

마지막 편집!

이제 알겠습니다. 속성이 기존의 형태의 경우는 AttributeSet에 HTML.Attribute ("type")의 인스턴스로서 포함됩니다. 그렇지 않으면 AttributeSet에 'String'을 키로 저장합니다. 어리 석다. 그러나 나는 거기에있다.

관련 문제