3

JFace を使用するアプリがありますTreeViewer。に接続していContentProviderます。ほとんどの場合、それはうまく機能します。ただし、ノードのリストの途中にノードを追加したり、ノードのラベルを変更する値を変更したりするなど、一部のアクションではrefresh()呼び出しが機能しません。親ノードを含めてみました。ラベルの更新には「true」と言ってください。常に機能するものはありません。

折りたたみ可能なノードを閉じたまま追加してから展開すると、追加されたノードが表示されることがわかりました。ただし、既に展開されている場合は、変更は表示されません。ツリー情報をディスクに保存して見ると、変更が加えられています。TreeViewer機能していないのはリフレッシュだけです。

inputChangedでメソッドを見ましたContentProviderが、アプリの実行の最初と最後にのみ呼び出されます。

誰でも助けることができますか?答えをほのめかしているすべての Web ページを読みましたが、何も機能しませんでした。

4

5 に答える 5

2

refresh() 中に contentprovider を呼び出すべきでない場合は、inputChanged() - ツリー ビューアーに対して setInput() 呼び出しが行われたときにのみ呼び出されます。

最悪の場合、元の入力で setInput() を呼び出して要素を更新することもできますが、アプリケーションにとっては遅すぎる可能性があります。

基本的に、グループの途中に新しいノードを追加するときは、親ノード (getChildren() 呼び出しを使用して追加された要素を返すノード)、またはその親の 1 つを更新する必要があります。基本的に、パラメーターなしで refresh() を呼び出すと、この理由で機能する可能性があります。

したがって、テストのために、パラメーターなしで refresh() を呼び出すことをお勧めします。それが機能するかどうかを試し、機能する場合は、アプリケーションで機能する最も具体的なノードを見つけてみてください。

于 2011-10-05T06:06:25.837 に答える
0

残念ながら、これを解決するものは何も見つかりませんでした。最終的にファイルを閉じてから再度開いて、「更新/更新」を強制しました。アドバイスをありがとう。

于 2012-02-15T16:37:37.413 に答える
0

TreeViewer にラベル デコレータを適用しましたか?

以前に適用した LabelDecorator なしで TreeViewer のエントリを編集したところ、 update(selectedItem, null) が実際に更新を適用しました (以前は何もしませんでした)。

おそらくそれはjfaceのバグですか?

[編集] DecoratingLabelProvider オブジェクトからupdateLabel()を使用する必要があるようです。

于 2011-12-12T01:02:53.527 に答える