メニューとコントロールを含む単純なSWTアプリケーションがあります。アプリケーションでテキスト、テーブル、ツリーを使用できます。disposeメソッドを明示的に呼び出して、現在のオブジェクトをクリアし、画面に他のウィジェットを表示するためのスペースを確保する必要があります。ウィジェットがまだアクティブ化されていない場合、disposeメソッドを呼び出すと、システムがクラッシュします。アクティブなウィジェットを破棄して別のウィジェット用のスペースを確保するために利用できるより良いアプローチはありますか?
1461 次
1 に答える
2
実際にウィジェットを破棄する必要がある場合は、追加したアイテムのリストを保持できます。リストに追加したアイテムのみを破棄します。
したがって、メインコンテナクラスでJFrameをオーバーライドし、リストにコントロールを追加するためのメソッドを1つまたは2つ用意します。(どこに行くかを特別に制御する必要がある場合は、add controlメソッドで渡すオプションクラスを使用することもできます)
class MainContainer extends JFrame {
private List<JComponent> currentComponents = new ArrayList<JComponent>();
public void addControl(JComponent newComp) {
// -- add it to the JFrame --
...
// -- make a note that it is on --
currentComponents.add(newComp);
}
public void removeControl(JComponent oldComp) {
// -- check if it is in the list --
if (currentComponents.contains(oldComp)) {
// -- remove it from the JFrame --
...
// -- remove it from the list --
currentComponents.remove(oldComp);
}
}
}
または、すべてのコンポーネントをオーバーライドして、フラグを表示することもできます。
private boolean isDisplayed();
メソッドとプライベートsetDisplayed(boolean state); 追加を行うときは表示状態をtrueに設定し、削除を行うときは表示状態がtrueの場合にのみ実行し、その後状態をfalseに設定します。
于 2012-05-01T14:21:53.930 に答える