2

メニューとコントロールを含む単純なSWTアプリケーションがあります。アプリケーションでテキスト、テーブル、ツリーを使用できます。disposeメソッドを明示的に呼び出して、現在のオブジェクトをクリアし、画面に他のウィジェットを表示するためのスペースを確保する必要があります。ウィジェットがまだアクティブ化されていない場合、disposeメソッドを呼び出すと、システムがクラッシュします。アクティブなウィジェットを破棄して別のウィジェット用のスペースを確保するために利用できるより良いアプローチはありますか?

4

1 に答える 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 に答える