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