JComponent () { final JPanel panel = new JPanel(new BorderLayout()); //Should be called from here to initialize fields !!! final JComponent optionsPanel = createOptionsPanel(); final JPanel subPanel = new JPanel(new BorderLayout()); final List<Pair<@NlsContexts.TabTitle String, JPanel>> panels = createAdditionalPanels(); if (myMethod.canChangeParameters()) { final JPanel parametersPanel = createParametersPanel(!panels.isEmpty()); if (!panels.isEmpty()) { parametersPanel.setBorder(JBUI.Borders.empty()); } subPanel.add(parametersPanel, BorderLayout.CENTER); } if (myMethod.canChangeVisibility() && !(myVisibilityPanel instanceof ComboBoxVisibilityPanel)) { subPanel.add(myVisibilityPanel, myMethod.canChangeParameters() ? BorderLayout.EAST : BorderLayout.CENTER); } panel.add(subPanel, BorderLayout.CENTER); final JPanel main; if (panels.isEmpty()) { main = panel; } else { final TabbedPaneWrapper tabbedPane = new TabbedPaneWrapper(getDisposable()); panel.setBorder(JBUI.Borders.customLine(JBColor.border(), 0, 1, 1, 1)); tabbedPane.addTab(RefactoringBundle.message("parameters.border.title"), panel); for (Pair<@NlsContexts.TabTitle String, JPanel> extraPanel : panels) { extraPanel.second.setBorder(JBUI.Borders.customLine(JBColor.border(), 0, 1, 1, 1)); tabbedPane.addTab(extraPanel.first, extraPanel.second); } main = new JPanel(new BorderLayout()); final JComponent tabs = tabbedPane.getComponent(); main.add(tabs, BorderLayout.CENTER); //remove traversal policies for (JComponent c : UIUtil.findComponentsOfType(tabs, JComponent.class)) { c.setFocusCycleRoot(false); c.setFocusTraversalPolicy(null); } } final JPanel bottom = new JPanel(new BorderLayout()); bottom.add(optionsPanel, BorderLayout.NORTH); bottom.add(createSignaturePanel(), BorderLayout.SOUTH); main.add(bottom, BorderLayout.SOUTH); main.setBorder(JBUI.Borders.emptyTop(5)); return main; }