0

ダイアログにコンボとテキスト ウィジェットがあります。ダイアログが最初にロードされたとき、私はコンボを存在させたいだけですが、コンボの選択に基づいてテキストを表示したいのです。

コードは次のとおりです。

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;
}

コンボの選択に基づいてダイアログに表示されるテキストを取得していません。

どこが間違っているのか教えてください

4

2 に答える 2

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

于 2013-06-18T23:17:43.213 に答える
0

実際に新しいコントロールを動的に作成する必要がある場合はlayout()、後で親を呼び出す必要があります。ただし、この場合、(@Baz の回答のように) コントロールを表示/非表示にすることをお勧めします。

于 2013-06-19T05:16:08.403 に答える