如何在SWT中有效地处理资源。

时间:2012-04-30 15:47:56

标签: java swt

我有一个简单的SWT应用程序,它包含菜单和控件。我在应用程序中有Text和table以及树可用,我需要显式调用dispose方法来清除当前对象并为在屏幕中显示其他小部件提供空间。如果小部件尚未激活,则当我调用时系统崩溃处置方法。有没有更好的方法来处置活动的小部件并为另一个小部件提供空间

1 个答案:

答案 0 :(得分:2)

如果您确实需要处理小部件,则可以保留已添加的项目列表。只处理您已添加到列表中的项目。

所以我会用我的主容器类覆盖JFrame,并有一个或两个方法来向列表中添加控件。 (如果你需要特殊控制他们去哪里,你可以在add控制方法中传递一个选项类)

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();

方法和     private setDisplayed(boolean state); 这样当你进行添加时,你将显示的状态设置为true,当你执行删除时,只有在显示的状态为true时才这样做,然后你将状态设置为false。