我的对话框中有一个Combo和一个文本小部件。初始加载对话框时,我只想要组合,但根据组合选择,我希望显示文本。
以下是代码:
public class NewDialog extends Dialog
{
private Label label1;
private Combo combo;
private Label label2;
private Text text;
private Composite container;
public NewDialog(Shell parentShell) {
super(parentShell);
}
@Override
protected Control createDialogArea(Composite parent)
{
container = (Composite) super.createDialogArea(parent);
GridLayout gridLayout = (GridLayout) container.getLayout();
gridLayout.numColumns = 3;
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
label1 = new Label(container, SWT.NONE);
label1.setText("Class");
combo = new Combo(container, SWT.NONE);
GridData gd_combo = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
gd_combo.widthHint = 165;
combo.setLayoutData(gd_combo);
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
combo.add("One");
combo.add("Two");
combo.add("Three");
combo.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent event)
{
if(combo.getText().equals("One"))
{
label2 = new Label(container, SWT.NONE);
label2.setText("Name");
text = new Text(container, SWT.BORDER);
GridData gd_text = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
gd_text.widthHint = 239;
text.setLayoutData(gd_text);
}
}
});
return container;
}
我没有根据组合选择在对话框中显示文本。
请告诉我哪里出错了
答案 0 :(得分:2)
此代码可以完成这项工作:
public static void main(String[] args)
{
Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout(2, false));
final Combo combo = new Combo(shell, SWT.SINGLE);
combo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
combo.add("First");
combo.add("Second");
combo.add("Third");
Label label = new Label(shell, SWT.NONE);
label.setText("Label: ");
final GridData labelData = new GridData(SWT.BEGINNING, SWT.CENTER, false, true);
labelData.exclude = true;
label.setLayoutData(labelData);
Text text = new Text(shell, SWT.BORDER);
final GridData textData = new GridData(SWT.FILL, SWT.FILL, true, true);
textData.exclude = true;
text.setLayoutData(textData);
combo.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event arg0)
{
boolean change = !combo.getText().equals("First");
labelData.exclude = change;
textData.exclude = change;
shell.pack();
}
});
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
它基本上使用GridData.exclude
字段隐藏/显示Label
和Text
。
答案 1 :(得分:0)
如果您确实需要动态创建新控件,那么之后应该在父级上调用layout()
。但是,在这种情况下,使控件可见/不可见(如在@ Baz的答案中)更好。