2011-06-22 3 views
2

Eclipse 3.6を使用するEclipse RCPスタンドアロンアプリケーションがあります。コマンドを使用して新しいFormPageをFormEditorに追加して表示する

私はFormEditorとその(複数の)FormEditorのFormPageを実装しました。最初のFormPageには、いくつかのデータを計算するコマンドを持つButtonがあり、結果を含む2番目のFormPageを開く必要があります。

結果が計算され、2番目のFormPageが結果を表示し、FormEditorに正しく追加されています。

私の問題は、FormEditorに新しいタブしか表示されないということです。 2番目のFormPageがすぐに表示されるようにします。代わりに、2番目のページを表示するには、タブをクリックする必要があります。

次は、FormPageをエディタに追加するハンドラのコードです。

これは問題なく動作しますが、ResultPageをフォアグラウンドにする必要があります。

public void setFocus(){ 
this.getPartControl().setFocus(); 
} 

しかしときがnullpointer Exeptionが発生します。このようなResultPageの方法)

IFormPage resultPage = editor.findPage("my.project.ResultPage"); 
resultPage.setFocus(); 

とのSetFocus(overrittenている:だから私はResultPageのは、setFocus()メソッドを呼び出そうとしましたメソッドsetFocusはPartControlを取得しようとします。 ResultPageはその時点でロードされていないようです。
は、だから私はこのようasyncExec経由では、setFocus()メソッドを呼び出そうとしました:

Display.getDefault().asyncExec(new Runnable() { 
public void run() { 
//...call the setFocus() Method .... 
} 
} 

をしかし、それは同じNullPointerExceptionが発生します。また、Runnableに待機を追加することにより、IllegalMonitorState Exceptionが発生します。

私はいくつかの方法を試して、解決策をインターネットで検索しましたが、見つけられませんでした。だから私はあなたが私を助けてくれることを願っています。

特定のFormPageを前面に持ってきれいな方法がありますか? setFocus()メソッドを間違って呼び出すのですか? toForeground()のようなものでしょうか? FormEditor/FormPage UI要素でこれが可能ではないのですか?

よろしく

マティアス

答えて

1

は、迅速な応答のためのあなたのEditorPart ((CTabFolder) getContainer()).setSelection(2);

+0

Thaksで試してみてください。これは少し動作します。 ResultPageはボタンをクリックしてフォアグラウンドになります。しかし残念ながら、このページは空白です。エディタでsetSelection(2)を呼び出すときにResultPageのcreateFormContentが呼び出されませんでした。だから私はResultPageがaferwardsで作成されているので、refresh()メソッドを呼び出すことさえできません。 – Matthias2206

+0

選択を設定する前に#pageChanged(int)を呼び出すと機能しますか? –

+0

はい、動作しています!大変ありがとう、あなたは英雄です! – Matthias2206

関連する問題