20 package net.sf.gridarta.gui.utils.borderpanel;
22 import java.awt.BorderLayout;
23 import java.awt.Component;
24 import java.awt.Container;
25 import java.awt.Dimension;
26 import java.awt.event.HierarchyEvent;
27 import java.awt.event.HierarchyListener;
28 import javax.swing.JSplitPane;
29 import org.jetbrains.annotations.NotNull;
30 import org.jetbrains.annotations.Nullable;
125 setLayout(
new BorderLayout());
128 splitPane.addPropertyChangeListener(evt -> {
135 if (evt.getPropertyName() == JSplitPane.DIVIDER_LOCATION_PROPERTY) {
136 final Object value = evt.getNewValue();
137 if (value instanceof Integer) {
138 final int newSize = (Integer) value;
139 final int splitPaneSize = getSplitPaneSize(newSize);
140 for (final Component optionalComponent : optionalComponents) {
141 if (optionalComponent != null) {
142 borderSplitPaneListener.sizeChanged(optionalComponent, splitPaneSize);
157 if (evt.getPropertyName() == JSplitPane.DIVIDER_LOCATION_PROPERTY) {
158 final Object value = evt.getNewValue();
159 if (value instanceof Integer) {
160 final int newSize = (Integer) value;
161 BorderSplitPane.this.size2 = newSize;
162 borderSplitPaneListener.size2Changed(newSize);
168 final HierarchyListener hierarchyListener =
new HierarchyListener() {
171 public void hierarchyChanged(
final HierarchyEvent e) {
172 if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0L && isShowing()) {
173 removeHierarchyListener(
this);
177 setDividerSize(size);
185 addHierarchyListener(hierarchyListener);
197 public void setOptionalComponent(@Nullable
final Component optionalComponent,
final boolean alternativeLocation,
final int size) {
198 setOptionalComponent(optionalComponent, alternativeLocation, size,
false);
211 private void setOptionalComponent(@Nullable
final Component optionalComponent,
final boolean alternativeLocation,
final int size,
final boolean force) {
212 final int index = alternativeLocation ? 1 : 0;
213 if (!force && optionalComponents[index] == optionalComponent) {
217 optionalComponents[index] = optionalComponent;
219 final Component centerComponent;
220 final boolean setSize2;
221 if (optionalComponents[0] ==
null && optionalComponents[1] ==
null) {
223 centerComponent = component;
225 centerComponent = splitPane;
228 if (optionalComponents[0] ==
null) {
230 tmp = optionalComponents[1];
232 }
else if (optionalComponents[1] ==
null) {
234 tmp = optionalComponents[0];
239 splitPane2.setTopComponent(optionalComponents[0]);
240 splitPane2.setBottomComponent(optionalComponents[1]);
244 splitPane.setTopComponent(tmp);
245 splitPane.setBottomComponent(component);
247 splitPane.setTopComponent(component);
248 splitPane.setBottomComponent(tmp);
253 add(centerComponent, BorderLayout.CENTER);
254 ignoreSizeChange =
true;
258 ignoreSizeChange =
false;
261 final Component otherComponent = optionalComponents[1 - index];
262 if (optionalComponent ==
null) {
263 if (otherComponent ==
null) {
266 final Dimension preferredSizeTmp = otherComponent.getPreferredSize();
267 final int preferredSize = getSplitPaneSize(preferredSizeTmp ==
null ? 50 : location.
isTopOrBottom() ? preferredSizeTmp.height : preferredSizeTmp.width);
268 setDividerSizeInt(preferredSize);
271 if (otherComponent ==
null) {
272 setDividerSizeInt(size);
274 final Dimension preferredSizeTmp = otherComponent.getPreferredSize();
275 final int preferredSize = getSplitPaneSize(preferredSizeTmp ==
null ? 50 : location.
isTopOrBottom() ? preferredSizeTmp.height : preferredSizeTmp.width);
276 setDividerSizeInt(Math.max(size, preferredSize));
293 setDividerSize(size);
304 splitPane.setDividerLocation(getSplitPaneSize(size));
314 splitPane2.setDividerLocation(size2);
323 final Dimension preferredSize = getSplitPanePreferredSize();
325 preferredSize.height = size;
327 preferredSize.width = size;
329 setSplitPanePreferredSize(preferredSize);
335 final int splitPaneSize = (location.
isTopOrBottom() ? splitPane.getHeight() : splitPane.getWidth()) - splitPane.getDividerSize();
336 result = Math.max(0, splitPaneSize - size);
347 for (
final Component optionalComponent : optionalComponents) {
348 if (optionalComponent !=
null) {
349 final Dimension preferredSize = optionalComponent.getPreferredSize();
350 if (preferredSize !=
null) {
351 return preferredSize;
356 for (
final Component optionalComponent : optionalComponents) {
357 if (optionalComponent !=
null) {
358 return optionalComponent.getSize();
362 return splitPane.getSize();
370 for (
final Component optionalComponent : optionalComponents) {
371 if (optionalComponent !=
null) {
372 optionalComponent.setPreferredSize(preferredSize);