2017-01-31 2 views
0

У меня есть форма в SWT, где у меня есть пять различных композиционных материалов на основе одного родительского composite.Each композита содержит различные виджеты, как одно текстовое поле/поля со списком/сочетание текста и комбо и т.д.Как загрузить часть композитного материала, остальную статическую?

Теперь проблема заключается в том, когда я нажимаю на кнопку, которую я хочу изменить на свой третий составной элемент, чтобы нести другой виджет, сохраняя другие static.Now, я не могу перезагрузить с самого начала, поскольку я хочу, чтобы отображались текущие значения других виджетов. Как я могу получить только этот композит, утилизируйте его и создайте вместо него новый виджет.

Создание и скрытие виджета сложно рассматривать, поскольку оно динамично, в каком месте мы хотим перерисовать.

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

formComposite=new Composite(parentComposite,SWT.BORDER_SOLID); 
    formLayout=new GridLayout(5,false); 
    fromComposite.setLayout(formLayout) 
    item.create(formComposite) //Here item is the widget (combo/textbox/combination text/combo) 

    formComposite1=new Composite(parentComposite,SWT.BORDER_SOLID); 
    formLayout1=new GridLayout(5,false); 
    fromComposite1.setLayout(formLayout) 
    item1.create(formComposite1)) 

    formComposite2=new Composite(parentComposite,SWT.BORDER_SOLID); 
    formLayout2=new GridLayout(5,false); 
    fromComposite2.setLayout(formLayout) 
    item2.create(formComposite2)) 

formComposite3=new Composite(parentComposite,SWT.BORDER_SOLID); 
    formLayout3=new GridLayout(5,false); 
    fromComposite3.setLayout(formLayout) 
    item3.create(formComposite3)) 

formComposite4=new Composite(parentComposite,SWT.BORDER_SOLID); 
    formLayout4=new GridLayout(5,false); 
    fromComposite4.setLayout(formLayout) 
    item4.create(formComposite4)) 

Теперь, как я могу заменить item3 на другой предмет, который будет создан, если другие будут статичными на их месте?

+1

Примечание: 'BORDER_SOLID' не является допустимым стилем для' Composite'. –

ответ

1

Предполагая, что у вас есть только один ребенок для каждого Composite, вы можете просто избавиться от существующего элемента управления и добавить новый, а затем переделать макет.

item.dispose(); 

item = new Combo(fromComposite, ... style); 

formComposite.layout(true); 

Вы также можете позвонить layout на parentComposite.

0

вы могли бы сделать это с помощью Control.moveAbove() и Control.moveBelow() методы

// create item3replacement 
item3replacement.moveAbove(item3); 
item3.dispose(); 
// call layout on parent when all is done 

иначе вам нужно будет написать свой собственный Layout, чтобы сделать это. , поскольку вы используете GridLayout, это будет вашей отправной точкой. вам нужно добавить значение для GridData и обработать его в GridLayout