[multiple changes]
2005-04-19 Roman Kennke <roman@kennke.org> * javax/swing/BoxLayout.java: (layoutContainer): Made this layout manager respect the minimum, maximum and preferred size more correctly. 2005-04-19 Roman Kennke <roman@ontographics.com> * javax/swing/BoxLayout.java: (preferredLayoutSize,minimumLayoutSize,maximumLayoutSize, layoutContainer): Make these methods and thereby the BoxLayout respect the insets (like borders) of the component that is laid out. From-SVN: r98378
This commit is contained in:
parent
615af6564e
commit
f8bf4f42f2
|
@ -1,3 +1,17 @@
|
||||||
|
2005-04-19 Roman Kennke <roman@kennke.org>
|
||||||
|
|
||||||
|
* javax/swing/BoxLayout.java:
|
||||||
|
(layoutContainer): Made this layout manager respect the
|
||||||
|
minimum, maximum and preferred size more correctly.
|
||||||
|
|
||||||
|
2005-04-19 Roman Kennke <roman@ontographics.com>
|
||||||
|
|
||||||
|
* javax/swing/BoxLayout.java:
|
||||||
|
(preferredLayoutSize,minimumLayoutSize,maximumLayoutSize,
|
||||||
|
layoutContainer): Make these methods and thereby the
|
||||||
|
BoxLayout respect the insets (like borders) of the
|
||||||
|
component that is laid out.
|
||||||
|
|
||||||
2005-04-19 Roman Kennke <roman@kennke.org>
|
2005-04-19 Roman Kennke <roman@kennke.org>
|
||||||
|
|
||||||
* javax/swing/JComponent.java:
|
* javax/swing/JComponent.java:
|
||||||
|
|
|
@ -42,6 +42,7 @@ import java.awt.Component;
|
||||||
import java.awt.ComponentOrientation;
|
import java.awt.ComponentOrientation;
|
||||||
import java.awt.Container;
|
import java.awt.Container;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
|
import java.awt.Insets;
|
||||||
import java.awt.LayoutManager2;
|
import java.awt.LayoutManager2;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@ -146,8 +147,9 @@ public class BoxLayout implements LayoutManager2, Serializable
|
||||||
if (parent != container)
|
if (parent != container)
|
||||||
throw new AWTError("invalid parent");
|
throw new AWTError("invalid parent");
|
||||||
|
|
||||||
int x = 0;
|
Insets insets = parent.getInsets();
|
||||||
int y = 0;
|
int x = insets.left + insets.right;
|
||||||
|
int y = insets.bottom + insets.top;
|
||||||
|
|
||||||
Component[] children = parent.getComponents();
|
Component[] children = parent.getComponents();
|
||||||
|
|
||||||
|
@ -191,8 +193,9 @@ public class BoxLayout implements LayoutManager2, Serializable
|
||||||
if (parent != container)
|
if (parent != container)
|
||||||
throw new AWTError("invalid parent");
|
throw new AWTError("invalid parent");
|
||||||
|
|
||||||
int x = 0;
|
Insets insets = parent.getInsets();
|
||||||
int y = 0;
|
int x = insets.left + insets.right;
|
||||||
|
int y = insets.bottom + insets.top;
|
||||||
|
|
||||||
Component[] children = parent.getComponents();
|
Component[] children = parent.getComponents();
|
||||||
|
|
||||||
|
@ -235,53 +238,155 @@ public class BoxLayout implements LayoutManager2, Serializable
|
||||||
throw new AWTError("invalid parent");
|
throw new AWTError("invalid parent");
|
||||||
|
|
||||||
Dimension size = parent.getSize();
|
Dimension size = parent.getSize();
|
||||||
|
Insets insets = parent.getInsets();
|
||||||
|
Dimension innerSize = new Dimension(size.width - insets.left
|
||||||
|
- insets.right, size.height
|
||||||
|
- insets.bottom - insets.top);
|
||||||
Component[] children = parent.getComponents();
|
Component[] children = parent.getComponents();
|
||||||
|
boolean[] laidOut = new boolean[children.length];
|
||||||
|
for (int index = 0; index < laidOut.length; index++)
|
||||||
|
laidOut[index] = false;
|
||||||
|
|
||||||
if (isHorizontalIn(parent))
|
if (isHorizontalIn(parent))
|
||||||
{
|
{
|
||||||
int x = 0;
|
// compute overall preferred width
|
||||||
|
int preferredWidthAll = 0;
|
||||||
|
for (int index = 0; index < children.length; index++)
|
||||||
|
{
|
||||||
|
preferredWidthAll += children[index].getPreferredSize().width;
|
||||||
|
}
|
||||||
|
double widthFactor = (double) innerSize.width /
|
||||||
|
(double) preferredWidthAll;
|
||||||
|
|
||||||
|
// sort out components that are constrained by minimum or maximum size
|
||||||
|
int widthRemain = innerSize.width;
|
||||||
for (int index = 0; index < children.length; index++)
|
for (int index = 0; index < children.length; index++)
|
||||||
{
|
{
|
||||||
Component comp = children[index];
|
Component comp = children[index];
|
||||||
Dimension sz = comp.getPreferredSize();
|
Dimension sz = comp.getPreferredSize();
|
||||||
int width = sz.width;
|
Dimension minSize = comp.getMinimumSize();
|
||||||
int height = sz.height;
|
Dimension maxSize = comp.getMaximumSize();
|
||||||
int cy = 0;
|
int width = (int) (sz.width * widthFactor);
|
||||||
if (height > size.height)
|
int height = Math.min(innerSize.height, maxSize.height);
|
||||||
|
// check min size
|
||||||
|
if (width < minSize.width)
|
||||||
{
|
{
|
||||||
height = size.height;
|
width = minSize.width;
|
||||||
|
comp.setSize(width, height);
|
||||||
|
laidOut[index] = true;
|
||||||
|
preferredWidthAll -= sz.width;
|
||||||
|
widthRemain -= width;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// check max size
|
||||||
|
if (width > maxSize.width)
|
||||||
|
{
|
||||||
|
width = maxSize.width;
|
||||||
|
comp.setSize(width, height);
|
||||||
|
laidOut[index] = true;
|
||||||
|
preferredWidthAll -= sz.width;
|
||||||
|
widthRemain -= width;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// recompute widthFactor for remaining components
|
||||||
|
widthFactor = (double) widthRemain / (double) preferredWidthAll;
|
||||||
|
|
||||||
|
int x = insets.left;
|
||||||
|
|
||||||
|
// lay out remaining comonents
|
||||||
|
for (int index = 0; index < children.length; index++)
|
||||||
|
{
|
||||||
|
Component comp = children[index];
|
||||||
|
int width = 0;
|
||||||
|
|
||||||
|
if (!laidOut[index])
|
||||||
|
{
|
||||||
|
Dimension sz = comp.getPreferredSize();
|
||||||
|
Dimension maxSize = comp.getMaximumSize();
|
||||||
|
width = (int) (sz.width * widthFactor);
|
||||||
|
int height = Math.min(innerSize.height, maxSize.height);
|
||||||
|
comp.setSize(width, height);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
width = comp.getWidth();
|
||||||
cy = (int) ((size.height - height) * comp.getAlignmentY());
|
|
||||||
}
|
int cy = (int) ((innerSize.height - comp.getHeight())
|
||||||
|
* comp.getAlignmentY() + insets.top);
|
||||||
comp.setSize(width, height);
|
|
||||||
comp.setLocation(x, cy);
|
comp.setLocation(x, cy);
|
||||||
x = x + width;
|
x = x + width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int y = 0;
|
// compute overall preferred height
|
||||||
|
int preferredHeightAll = 0;
|
||||||
|
for (int index = 0; index < children.length; index++)
|
||||||
|
{
|
||||||
|
preferredHeightAll += children[index].getPreferredSize().height;
|
||||||
|
}
|
||||||
|
double heightFactor = (double) innerSize.height /
|
||||||
|
(double) preferredHeightAll;
|
||||||
|
|
||||||
|
// sort out components that are constrained by minimum or maximum size
|
||||||
|
int heightRemain = innerSize.height;
|
||||||
for (int index = 0; index < children.length; index++)
|
for (int index = 0; index < children.length; index++)
|
||||||
{
|
{
|
||||||
Component comp = children[index];
|
Component comp = children[index];
|
||||||
Dimension sz = comp.getPreferredSize();
|
Dimension sz = comp.getPreferredSize();
|
||||||
int width = sz.width;
|
Dimension minSize = comp.getMinimumSize();
|
||||||
int height = sz.height;
|
Dimension maxSize = comp.getMaximumSize();
|
||||||
int cx = 0;
|
int height = (int) (sz.height * heightFactor);
|
||||||
if (width > size.width)
|
int width = Math.min(innerSize.width, maxSize.width);
|
||||||
|
// check min size
|
||||||
|
if (height < minSize.height)
|
||||||
{
|
{
|
||||||
width = size.width;
|
height = minSize.height;
|
||||||
|
comp.setSize(width, height);
|
||||||
|
laidOut[index] = true;
|
||||||
|
preferredHeightAll -= sz.height;
|
||||||
|
heightRemain -= height;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// check max size
|
||||||
|
if (height > maxSize.height)
|
||||||
|
{
|
||||||
|
height = maxSize.height;
|
||||||
|
comp.setSize(width, height);
|
||||||
|
laidOut[index] = true;
|
||||||
|
preferredHeightAll -= sz.height;
|
||||||
|
heightRemain -= height;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// recompute heightFactor for remaining components
|
||||||
|
heightFactor = (double) heightRemain / (double) preferredHeightAll;
|
||||||
|
|
||||||
|
int y = insets.top;
|
||||||
|
|
||||||
|
// lay out remaining comonents
|
||||||
|
for (int index = 0; index < children.length; index++)
|
||||||
|
{
|
||||||
|
Component comp = children[index];
|
||||||
|
int height = 0;
|
||||||
|
|
||||||
|
if (!laidOut[index])
|
||||||
|
{
|
||||||
|
Dimension sz = comp.getPreferredSize();
|
||||||
|
Dimension maxSize = comp.getMaximumSize();
|
||||||
|
height = (int) (sz.height * heightFactor);
|
||||||
|
int width = Math.min(innerSize.width, maxSize.width);
|
||||||
|
comp.setSize(width, height);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
height = comp.getHeight();
|
||||||
cx = (int) ((size.width - width) * comp.getAlignmentX());
|
|
||||||
}
|
int cx = (int) ((innerSize.width - comp.getWidth())
|
||||||
|
* comp.getAlignmentX() + insets.left);
|
||||||
comp.setSize(width, height);
|
|
||||||
comp.setLocation(cx, y);
|
comp.setLocation(cx, y);
|
||||||
y = y + height;
|
y = y + height;
|
||||||
}
|
}
|
||||||
|
@ -352,8 +457,9 @@ public class BoxLayout implements LayoutManager2, Serializable
|
||||||
if (parent != container)
|
if (parent != container)
|
||||||
throw new AWTError("invalid parent");
|
throw new AWTError("invalid parent");
|
||||||
|
|
||||||
int x = 0;
|
Insets insets = parent.getInsets();
|
||||||
int y = 0;
|
int x = insets.left + insets.right;
|
||||||
|
int y = insets.top + insets.bottom;
|
||||||
|
|
||||||
Component[] children = parent.getComponents();
|
Component[] children = parent.getComponents();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue