2017-01-31 12 views
0

У меня есть композит, где я создаю пять текстовых полей при запуске представления. Существует кнопка, по щелчку которой я хочу заменить 4-й текстовый блок на поле со списком. Проблема в том, что я не могу перезагрузить страницу с самого начала, так как хочу отображать текущее значение текстовых полей.Как избавиться от виджета и создать еще один виджет вместо этого в SWT?

Это фрагмент.

public class DisposeDemo { 
    private static void addControls(Shell shell) { 
    shell.setLayout(new GridLayout()); 
    Text textOne=new Text(shell, SWT.BORDER); 
    Text textTwo=new Text(shell, SWT.BORDER); 
    Text textThree=new Text(shell, SWT.BORDER); 
    Text textFour=new Text(shell, SWT.BORDER); 
    Text textFive=new Text(shell, SWT.BORDER); 

    Button button = new Button(shell, SWT.PUSH); 
    button.setText("Replace text with Combo"); 

    button.addSelectionListener(new SelectionAdapter() { 
     @Override public void widgetSelected(SelectionEvent event) { 

     //What code should go here to Replace the textFour with a combo 

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

ответ

0

Вместо того, чтобы заменить элемент управления (который сложно) создать все элементы управления в начале, но сделать один из них невидимым и исключить его из макета. Затем вы можете переключить видимость.

При создании использования:

Text textFour = new Text(shell, SWT.BORDER); 
GridData data = new GridData(SWT.LEFT, SWT.CENTER, false, false); 
textFour.setLayoutData(textFour); 

Combo comboFour = new Combo(shell, ... style ...); 
comboFour.setVisible(false); // Not visible 
data = new GridData(SWT.LEFT, SWT.CENTER, false, false); 
data.exclude = true; // Exclude from layout 
comboFour.setLayoutData(data); 

Для переключения, чтобы иметь комбо видимый:

textFour.setVisible(false); 
GridData data = (GridData)textFour.getLayoutData(); 
data.exclude = true; 

comboFour.setVisible(true); 
data = (GridData)comboFour.getLayoutData(); 
data.exclude = false; 

shell.layout(true); // Tell shell to redo the layout 
+0

На самом деле в реальном времени у меня есть форма, имеющая пять композитов, расположенных в row.Each композита содержит некоторые виджеты, такие как одно текстовое поле/комбинация текстового поля/комбо и т. д. Так, нажав одну кнопку, я хочу, чтобы содержимое одного композита снова загружалось, сохраняя другие композиты static.Is там работает для этого? –

+0

Извините, я не понимаю. Задайте новый вопрос, объясняющий более подробно. –

+0

Sure.I выложу новый вопрос. –