2009-04-17 10 views
0

私はSwingのJTextPaneでHTMLDocumentを使いこなしています。私はこのような状況を持っている場合:HTMLDocument:span要素を "最適化"するSwingはありますか?

<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で+ディスプレイ私はSwingで行うよりもはるかに多くをので、私は別の質問をします....

答えて

1

、私はスイングを知りませんが、

<p style="display: inline;">は改行をしません同じ<span>

+0

残念ながら、SwingのHTMLDocumentは、HTMLのサポートが限られているようです。おそらく、私はリッチテキストのニーズを表示するために別のGUI要素を見つける必要があります.... –

0

私はHTMLDocumentのjavadocを見て、私に指摘しました〜HTMLReader

HTMLReaderにspanの言及はありません。たぶんそれはその要素を知りません。

Pはおそらくスパンの代わりには適していません。 Pはブロックレベルの要素、spanはテキストレベルの要素(see description of those terms)です。たぶん、属性のないフォント(別のテキストレベルの要素)を試してみませんか?

1

私はまさにこの問題を抱えています。私のスパン要素は消えます。 divを使用している場合は、私はそれらを見ることができます。しかし、私はdiv要素を望んでいません。なぜならそれは改行を引き起こすからです。

くそー!くそーjava。

編集!

停止を押してください!

答えを見つけました。少なくとも、私のためにそれを修正する答え。

私はまだ私のスパン要素があると判断することができました。私は何をしているのかを記述し、どのようにコードを提供するのかを説明します。

キャレットがどの要素にあるのか知りたいので、このコードは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のコンストラクタはプライベートであり、必要な属性タイプが特権付き属性セット内に存在しないということが起こります。野郎! だから、すべてが失われていない...私はまだ列挙子を介して得ることができます..しかし、それは必要とされるより少し難しいです。

LAST EDIT!

[OK]を今すぐ取得します。属性が既知の型の場合、AttributeSetにはHTML.Attribute( "type")のインスタンスとして格納されます。 それ以外の場合は、AttributeSetにキーとして 'String'が格納されます。 愚か。しかし、私はそこにいる。

関連する問題