diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java index 165de68ad14b..a7c396a03e06 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/MergedCompositeConfigurable.java @@ -10,6 +10,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import javax.swing.border.EmptyBorder; abstract class MergedCompositeConfigurable implements SearchableConfigurable { protected final Configurable[] children; @@ -43,7 +44,7 @@ abstract class MergedCompositeConfigurable implements SearchableConfigurable { rootComponent = children[0].createComponent(); } else { - JPanel panel = new JPanel(new VerticalFlowLayout(0, isUseTitledBorder() ? 0 : TitledSeparator.TOP_INSET)); + JPanel panel = createPanel(isUseTitledBorder()); for (Configurable child : children) { JComponent component = child.createComponent(); assert component != null; @@ -58,6 +59,16 @@ abstract class MergedCompositeConfigurable implements SearchableConfigurable { return rootComponent; } + @NotNull + static JPanel createPanel(boolean isUseTitledBorder) { + int verticalGap = TitledSeparator.TOP_INSET; + JPanel panel = new JPanel(new VerticalFlowLayout(0, isUseTitledBorder ? 0 : verticalGap)); + // 1) VerticalFlowLayout incorrectly use vertical gap as top inset + // 2) if isUseTitledBorder, created titled border will add gap before component + panel.setBorder(new EmptyBorder(-verticalGap, 0, 0, 0)); + return panel; + } + @Override public boolean isModified() { for (Configurable child : children) { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SubCompositeConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SubCompositeConfigurable.java index c1c6465ebe17..6b58f5422a24 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SubCompositeConfigurable.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/SubCompositeConfigurable.java @@ -26,6 +26,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import javax.swing.border.EmptyBorder; import java.util.List; abstract class SubCompositeConfigurable implements SearchableConfigurable.Parent { @@ -109,9 +110,11 @@ abstract class SubCompositeConfigurable implements SearchableConfigurable.Parent rootComponent = children[0].createComponent(); } else { - JPanel panel = new JPanel(new VerticalFlowLayout(0, IdeBorderFactory.TITLED_BORDER_BOTTOM_INSET)); + JPanel panel = new JPanel(new VerticalFlowLayout(0, 0)); if (root != null) { - panel.add(root.getComponent()); + JComponent c = root.getComponent(); + c.setBorder(new EmptyBorder(0, 0, IdeBorderFactory.TITLED_BORDER_BOTTOM_INSET, 0)); + panel.add(c); } for (Configurable child : children) { JComponent component = child.createComponent();