2013-06-18 50 views
0

我在对话框中有一个组合和一个文本小部件。当对话框最初加载时,我只想要组合选项存在,但基于组合选择,我希望显示文本。如何根据组合选择动态创建SWT文本

下面是代码:

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

尝试梳#getSelectionIndex(),但然后也许一个组合不是正确的控制? – nitind

+0

@ kk331317您对答案有何反馈? – Baz

回答

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场隐藏/显示LabelText

0

如果您确实需要动态创建新的控件,则应在父页上之后调用layout()。但是,在这种情况下,使控件可见/不可见(如@ Baz的答案)更好。

相关问题