package gui; import java.awt.*; import javax.swing.*; @SuppressWarnings("serial") class SplitPane extends JSplitPane { SplitPane() { super(); } SplitPane(int newOrientation) { super(newOrientation); } SplitPane(int newOrientation, boolean newContinuousLayout) { super(newOrientation, newContinuousLayout); } SplitPane(int newOrientation, boolean newContinuousLayout, Component newLeftComponent, Component newRightComponent) { super(newOrientation, newContinuousLayout, newLeftComponent, newRightComponent); } SplitPane(int newOrientation, Component newLeftComponent, Component newRightComponent) { super(newOrientation, newLeftComponent, newRightComponent); } /** * Override this method to prevent setting a location that violates the * maximum size of either component in the splitter, if setMaximumSize() has * been called. */ public void setDividerLocation(int requested) { int currentLoc = getDividerLocation(); if (currentLoc == requested) { super.setDividerLocation(requested); return; } boolean growing = requested > currentLoc; Component maxComp = growing ? getLeftComponent() : getRightComponent(); if (maxComp == null) { super.setDividerLocation(requested); return; } Dimension maxDim = maxComp.getMaximumSize(); if (maxDim == null) { super.setDividerLocation(requested); return; } int maxCompSize = getSizeForPrimaryAxis(maxDim); if (growing) { if (requested > maxCompSize) { super.setDividerLocation(maxCompSize); return; } } else { int totalSize = getSizeForPrimaryAxis(getSize()); int minPos = totalSize - maxCompSize - getDividerSize(); if (requested < minPos) { super.setDividerLocation(minPos); return; } } super.setDividerLocation(requested); } /** * If the orientation is Horizontal, the width is returned, otherwise the * height. */ private int getSizeForPrimaryAxis(Dimension size) { return (getOrientation() == HORIZONTAL_SPLIT) ? size.width : size.height; } }