/** @param verticalSplit <code>true</code> means that splitter will have vertical split */ public void setOrientation(boolean verticalSplit) { myVerticalSplit = verticalSplit; myFirstDivider.setOrientation(verticalSplit); myLastDivider.setOrientation(verticalSplit); doLayout(); repaint(); }
public void doLayout() { final int width = getWidth(); final int height = getHeight(); Rectangle firstRect = new Rectangle(); Rectangle firstDividerRect = new Rectangle(); Rectangle lastDividerRect = new Rectangle(); Rectangle lastRect = new Rectangle(); Rectangle innerRect = new Rectangle(); final int componentSize = getOrientation() ? height : width; int dividerWidth = getDividerWidth(); int dividersCount = visibleDividersCount(); int firstCompontSize; int lastComponentSize; int innerComponentSize; if (componentSize <= dividersCount * dividerWidth) { firstCompontSize = 0; lastComponentSize = 0; innerComponentSize = 0; dividerWidth = componentSize; } else { firstCompontSize = getFirstSize(); lastComponentSize = getLastSize(); int sizeLack = firstCompontSize + lastComponentSize - (componentSize - dividersCount * dividerWidth); if (sizeLack > 0) { // Lacking size. Reduce first component's size, inner -> empty firstCompontSize -= sizeLack; innerComponentSize = 0; } else { innerComponentSize = componentSize - dividersCount * dividerWidth - getFirstSize() - getLastSize(); } if (!innerVisible()) { lastComponentSize += innerComponentSize; innerComponentSize = 0; if (!lastVisible()) { firstCompontSize = componentSize; } } } if (getOrientation()) { int space = firstCompontSize; firstRect.setBounds(0, 0, width, firstCompontSize); if (firstDividerVisible()) { firstDividerRect.setBounds(0, space, width, dividerWidth); space += dividerWidth; } innerRect.setBounds(0, space, width, innerComponentSize); space += innerComponentSize; if (lastDividerVisible()) { lastDividerRect.setBounds(0, space, width, dividerWidth); space += dividerWidth; } lastRect.setBounds(0, space, width, lastComponentSize); } else { int space = firstCompontSize; firstRect.setBounds(0, 0, firstCompontSize, height); if (firstDividerVisible()) { firstDividerRect.setBounds(space, 0, dividerWidth, height); space += dividerWidth; } innerRect.setBounds(space, 0, innerComponentSize, height); space += innerComponentSize; if (lastDividerVisible()) { lastDividerRect.setBounds(space, 0, dividerWidth, height); space += dividerWidth; } lastRect.setBounds(space, 0, lastComponentSize, height); } myFirstDivider.setVisible(firstDividerVisible()); myFirstDivider.setBounds(firstDividerRect); myFirstDivider.doLayout(); myLastDivider.setVisible(lastDividerVisible()); myLastDivider.setBounds(lastDividerRect); myLastDivider.doLayout(); validateIfNeeded(myFirstComponent, firstRect); validateIfNeeded(myInnerComponent, innerRect); validateIfNeeded(myLastComponent, lastRect); }