Я хотел бы создать все свои виджеты, прежде чем вставлять их в родительский элемент swt Composite. Но, насколько я понимаю, родитель всегда указывается в конструкторе при создании дочернего элемента:
Composite container = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
container.setLayout(layout);
layout.numColumns = 3;
layout.verticalSpacing = 9;
...
// Create a child at first row leftmost location
Label labelConfigurator = new Label(container, SWT.NULL);
labelConfigurator.setText(title);
Можно ли как-то отделить создание виджетов от вставки/размещения в родительский контейнер?
Ответ 1 · Ladlestein
Нет, нет. Небольшое пояснение здесь.
В зависимости от того, чего вы хотите, фабрика может вам помочь; в прошлом я использовал что-то вроде этого:
public interface ViewerFactory {
Text getText(Composite parent);
ContentViewer getListViewer(Composite parent);
Label getLabel(Composite parent);
}
с реализацией
private final class ViewerFactoryImpl implements ViewerFactory {
@ Override
public Label getLabel ( Composite parent ) {
return new Label ( parent , SWT.NONE ) ;
}
@ Override
public ContentViewer getListViewer ( Composite parent ) {
return new ListViewer ( parent , SWT.V_SCROLL | SWT.BORDER | SWT.MULTI ) ;
}
@ Override
public Text getText ( Composite parent ) {
return new Text ( parent , SWT.BORDER ) ;
}
}
... что помогло мне абстрагироваться от создания виджетов в большей части моего кода. Когда я пишу модульный тест, я издеваюсь над заводским интерфейсом.