JPanel () { WebProjectSettingsStepWrapper settingsStep = new WebProjectSettingsStepWrapper(this); if (myProjectGenerator instanceof WebProjectTemplate) { getPeer().buildUI(settingsStep); } else if (myProjectGenerator instanceof TemplateProjectDirectoryGenerator) { ((TemplateProjectDirectoryGenerator<?>)myProjectGenerator).buildUI(settingsStep); } else { return createContentPanelWithAdvancedSettingsPanel(); } //back compatibility: some plugins can implement only GeneratorPeer#getComponent() method if (settingsStep.isEmpty()) return createContentPanelWithAdvancedSettingsPanel(); final JPanel jPanel = new JPanel(new VerticalFlowLayout(0, 5)); List<LabeledComponent<? extends JComponent>> labeledComponentList = new ArrayList<>(); labeledComponentList.add(createLocationComponent()); labeledComponentList.addAll(settingsStep.getFields()); final JPanel scrollPanel = new JPanel(new BorderLayout()); scrollPanel.add(jPanel, BorderLayout.NORTH); for (LabeledComponent<? extends JComponent> component : labeledComponentList) { component.setLabelLocation(BorderLayout.WEST); jPanel.add(component); } for (JComponent component : settingsStep.getComponents()) { jPanel.add(component); } UIUtil.mergeComponentsWithAnchor(labeledComponentList); return scrollPanel; }