2012-01-14 17 views
3

JEditorPaneのgetCaretPositionメソッドは、htmlコントロールのテキスト部分のみにインデックスを与えます。インデックスをHTMLテキストに入れる可能性はありますか?JEditorPaneのhtmlへのキャレット位置

私はHTMLテキストがあるとします。具体的に(ただし、|キャレット位置を表す)

abcd<img src="1.jpg"/>123|<img src="2.jpg"/> 

私は画像のファイル名を読み出すために、結果として25を必要としながら、今getCaretPositionは8を提供します。

答えて

1

タグを文字としてカウントできるようにキャレットを変換することはできません。最終的な目的は、画像のファイル名を読み取ることがある場合は、使用する必要があります。利用の詳細については

HTMLEditorKit (JEditorPane.getEditorKitForContentType("text/html")); 

を興味深い例が含まれていOracle HTMLEditorKit documentationし、このO'Reilly PDFを参照してください。

1

JEditorPaneの基になるモデル(あなたの場合HTMLDocumentのStyledDocumentのいくつかのサブクラス)は、実際にHTMLテキストを内部表現として保持しません。代わりに、スタイル属性を含むElementsのツリーがあります。ツリーがHTMLWriterを介して実行されると、HTMLになります。それで、やってみたいことがやりにくくなります!私はあなたが現在いるキャラクター要素にいくつかのフラグ属性を置き、HTMLWriterの特別に細工されたサブクラスを使用して、そのマーカーまで書き出して文字を数えることを想像することができますが、それは壮大なハッキングのようなものです。実際には私には分かりませんが、おそらくそこに欲しいものを手に入れるのは簡単な方法でしょう。

1

私は同じ問題を抱えていた、そして次のコードでそれを解決:

editor.getDocument().insertString(editor.getCaretPosition(),"String to insert", null); 
0

Iはほとんど同じ問題を抱えていたし、次の方法でそれを解決した(私はJTextPaneを使用するが、それはのために同じでなければなりませんJEditorPane):

public int getCaretPositionHTML(JTextPane pane) { 
    HTMLDocument document = (HTMLDocument) pane.getDocument(); 
    String text = pane.getText(); 
    String x; 
    Random RNG = new Random(); 
    while (true) { 
     x = RNG.nextLong() + ""; 
     if (text.indexOf(x) < 0) break; 
    } 
    try { 
     document.insertString(pane.getCaretPosition(), x, null); 
    } catch (BadLocationException ex) { 
     ex.printStackTrace(); 
     return -1; 
    } 
    text = pane.getText(); 
    int i = text.indexOf(x); 
    pane.setText(text.replace(x, "")); 
    return i; 
} 

それはちょうどあなたのJTextPaneのは、すべての可能なLong値が含まれていませんと仮定します。)

関連する問題