2012-04-12 10 views
0

私はJEditorPaneを使ってhtmlテキストを表示しています。 htmlファイルが含まれている場合JEditorPane内のウィジェットへのアクセス方法

<form action="WORK3.html" method="get"> 
    <input type="text" value="Enter your name here!" size="25"> 
</form> 

JEditorPaneは、エディタウィジェット内にテキストフィールドウィジェットを配置します。私がしたいのは、テキストフィールド内の値を取得することです。テキストフィールドのウィジェットまたはテキスト値を取得するにはどうすればよいですか?

答えて

1

HTMLコントロールは、プライベート内部クラスInvalidator extends ContainerにラップされたJEditorPaneに追加されます。

JEditorPaneのすべての子コンポーネントを取得できます。それぞれがInvalidatorインスタンスである必要があります。 Invalidatorの唯一の子は、編集コンポーネント自体です(例:<input>タグのJTextFlied)。

+0

こんにちはスタニスラフ、あなたの提案を投稿する前に、私は同様の考えで少し遊んだ。私は遠くにはいなかった。私は無効化コンポーネントに行った、あなたは言ったように。しかし、これは私が立ち往生したところです。私はこのコンポーネントよりも遠くには立ち入ることができませんでした。 getComponentAtは子ではありません。次に、invalidatorコンポーネントが最後のものであると仮定し、いくつかのリスナーを追加しようとします。それらのリスナーはトリガーされませんでした。私の次のオプションは、デフォルトを使用する代わりにcomponentViewをインターセプトして作成することです。 – tadpole

0

お返事ありがとうございましたStanislavありがとうございます。コンポーネントを取得しようとするのは私にとっては難しかったです。私はこの問題を回避する方法を見つけました。これが他の人を助けることを願っています。ウィジェットにアクセスする方法を見つけることはできませんでしたが、独自のテキストウィジェットを作成してデフォルトウィジェットに置き換えることができます。そうすれば、私はウィジェットをコントロールすることができます。これを行うには、HTMLEditorKit.HTMLFactoryをサブクラス化する必要があります。このクラスでは、オーバーライドする必要があります。

public View create (Element elem_) { 
    Document doc = elem_.getDocument(); 
    Object obj = elem_.getAttributes(). 
     getAttribute(StyleConstants.NameAttribute); 

    HTML.Tag tag = (HTML.Tag) obj; 

    if (tag.toString().equals ("input")) { 
     // you can replace your widget here if you want 
     // i choose to use the default but save the view for 
     // my own use later 
     ComponentView view = (ComponentView)super.create (elem_); 
     // save the component view to where you want to access 
     // later. you can retrieve the component from the 
     // ComponentView and cast it to back to JTextField 
     _editor.saveView (view); 

     return (view); 
    } 

    else { 
     return (super.create (elem_); 
    } 
} 

制御するウィジェットの種類ごとに少なくとも1回は行う必要があります。それは痛みですが、それは仕事です。

0

コンポーネントをtextPane内に挿入したときは、そのコンポーネントをInvalidatorクラスから「アンラップする」必要があります。

//Loop through the components, maybe looking for some in particular 

for (Component cont : myTextPane.getComponents()) { 
//Unwrap your component, means take the only one component from the wrapper container 
    Component comp = ((Container) cont).getComponent(0); 

    //Do your things with your component 
    // ...  
} 
関連する問題