SWT / JFace:删除小部件
Group group = new Group(parent, SWT.NONE); StyledText comment = new StyledText(group, SWT.BORDER_DASH);
这将创建一个内部带有文本区域的组。
我以后如何删除文本(从屏幕上删除它,以便我可以用其他东西替换它)?
使用Widget.dispose。
public class DisposeDemo { private static void addControls(final Shell shell) { shell.setLayout(new GridLayout()); Button button = new Button(shell, SWT.PUSH); button.setText("Click to remove all controls from shell"); button.addSelectionListener(new SelectionListener() { @Override public void widgetDefaultSelected(SelectionEvent event) {} @Override public void widgetSelected(SelectionEvent event) { for (Control kid : shell.getChildren()) { kid.dispose(); } } }); for (int i = 0; i < 5; i++) { Label label = new Label(shell, SWT.NONE); label.setText("Hello, World!"); } shell.pack(); } public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); addControls(shell); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } }
另一种选择是使用StackLayout在底层控件之间切换。 这可以防止您遇到“小部件被丢弃”错误。
您必须调用comment.changeParent(newParent)
或comment.setVisible(false)
才能从组中删除/隐藏它。 我不确定comment.changeParent(null)
是否可行,但我会尝试一下。
我们这样做是因为SWT使用复合模式 。
group.getChildren()[0].dispose()
将删除第一个子group.getChildren()[0].dispose()
。 您需要找到一种方法来识别要删除的精确子项。 它可以比较id。 您可以通过在该控件上使用setData / getData来执行此操作:
例如:
StyledText comment = new StyledText(group, SWT.BORDER_DASH); comment.setData("ID","commentEditBox");
接着:
for (Control ctrl : group.getChildren()) { if (control.getData("ID").equals("commentEditBox")) { ctrl.dispose(); break; } }