closableをtrueに設定したviewpartがあります。ユーザーがxをクリックします。私はビューパーツを隠すのではなく、それを閉じたいと思います。どのようにこれを行うことができますか?xをクリックしたときにviewpartを破棄する代わりに非表示にする
答えて
UIに貢献するテンプレートからアプリケーションを作成した場合は、事前に生成されたパッケージの1つにWorkbenchWindowAdvisorファイルが必要です。終了時にウィンドウを隠すための正確な実装の詳細については不明ですが、アプリケーションのWorkbenchWindowAdvisor実装でpreWindowShellCloseメソッドを変更する必要があるようです。
あなたはこれを試すことができます。
shell
はViewpartの直接の親シェルです
shell.addShellListener(new ShellListener() {
public void shellIconified(ShellEvent e) {
}
public void shellDeiconified(ShellEvent e) {
}
public void shellDeactivated(ShellEvent e) {
}
public void shellClosed(ShellEvent e) {
shell.setVisible(false);
e.doit = false;
}
public void shellActivated(ShellEvent e) {
}
});
。注目すべき主な点はe.doit=false
であり、これは本質的にcloseイベントを無効にします。
私の知る限り、これは一般的に不可能です。基本的に、ワークベンチ・パートは、エディタまたはビュー「オープン」を持つワークベンチ・ウィンドウのすべてのパースペクティブ間で共有されます。したがって、パーツを表示する新しいプレゼンテーションサイトと一致するように、パーツのComposite
への視点を切り替えると、単にサイズが変更されます。
パーツが特定のパースペクティブのために閉じられている場合、パーツが隠されています。ウィンドウのすべてのパースペクティブに対してそのパーツが非表示になっていると、それが破棄されます。そして、私が見る限り、それを防ぐ方法はありません。
これは可能ですが、扱いにくいです!
ビューを閉じると、現在のパースペクティブからビューが実際に隠されます。ビューがどこにも表示されていない場合は、ビューが配置されます。
これは、RCPアプリケーションに2つのパースペクティブを追加することで確認することができます。両方のビューを同じビューに含めます。ビューAを閉じても、ビューBはまだ開いているので、ビューBを閉じてもそれは処理されません。
ビューを破棄しないように、別のパースペクティブに含まれていることを確認してください。 RCPアプリケーションがパースペクティブを使用しない場合は、表示されない「隠された」パースペクティブを使用できますが、すべての「隠した」ビューが格納されないように保管します。
How to close a ViewPart in Eclipse?も参照してください。正確な反対が要求されています。
これは、viewpartがシェルで直接ホストされている場合には当てはまりますが、これは通常Eclipseでは当てはまりません。 –