void (JComponent root, boolean useOnePixelDivider) { final Container parent = root.getParent(); if (root instanceof JSplitPane pane) { // we can painlessly replace only splitter which is the only child in container if (parent.getComponents().length != 1 && !(parent instanceof Splitter)) { return; } final Component component1 = pane.getTopComponent(); final Component component2 = pane.getBottomComponent(); final int orientation = pane.getOrientation(); boolean vertical = orientation == JSplitPane.VERTICAL_SPLIT; final Splitter splitter = useOnePixelDivider ? new OnePixelSplitter(vertical) : new JBSplitter(vertical); splitter.setFirstComponent((JComponent)component1); splitter.setSecondComponent((JComponent)component2); splitter.setShowDividerControls(pane.isOneTouchExpandable()); splitter.setHonorComponentsMinimumSize(true); if (pane.getDividerLocation() > 0) { // let the component chance to resize itself SwingUtilities.invokeLater(() -> { double proportion; if (pane.getOrientation() == JSplitPane.VERTICAL_SPLIT) { proportion = pane.getDividerLocation() / (double)(parent.getHeight() - pane.getDividerSize()); } else { proportion = pane.getDividerLocation() / (double)(parent.getWidth() - pane.getDividerSize()); } if (proportion > 0 && proportion < 1) { splitter.setProportion((float)proportion); } }); } if (parent instanceof Splitter psplitter) { if (psplitter.getFirstComponent() == root) { psplitter.setFirstComponent(splitter); } else { psplitter.setSecondComponent(splitter); } } else { parent.remove(0); parent.setLayout(new BorderLayout()); parent.add(splitter, BorderLayout.CENTER); } replaceJSplitPaneWithIDEASplitter((JComponent)component1, useOnePixelDivider); replaceJSplitPaneWithIDEASplitter((JComponent)component2, useOnePixelDivider); } else { final Component[] components = root.getComponents(); for (Component component : components) { if (component instanceof JComponent) { replaceJSplitPaneWithIDEASplitter((JComponent)component, useOnePixelDivider); } } } }