home *** CD-ROM | disk | FTP | other *** search
- package java.awt;
-
- public class FlowLayout implements LayoutManager {
- public static final int LEFT = 0;
- public static final int CENTER = 1;
- public static final int RIGHT = 2;
- int align;
- int hgap;
- int vgap;
-
- public FlowLayout() {
- this(1, 5, 5);
- }
-
- public FlowLayout(int align) {
- this(align, 5, 5);
- }
-
- public FlowLayout(int align, int hgap, int vgap) {
- this.align = align;
- this.hgap = hgap;
- this.vgap = vgap;
- }
-
- public void addLayoutComponent(String name, Component comp) {
- }
-
- public void removeLayoutComponent(Component comp) {
- }
-
- public Dimension preferredLayoutSize(Container target) {
- Dimension dim = new Dimension(0, 0);
- int nmembers = target.countComponents();
-
- for(int i = 0; i < nmembers; ++i) {
- Component m = target.getComponent(i);
- if (m.visible) {
- Dimension d = m.preferredSize();
- dim.height = Math.max(dim.height, d.height);
- if (i > 0) {
- dim.width += this.hgap;
- }
-
- dim.width += d.width;
- }
- }
-
- Insets insets = target.insets();
- dim.width += insets.left + insets.right + this.hgap * 2;
- dim.height += insets.top + insets.bottom + this.vgap * 2;
- return dim;
- }
-
- public Dimension minimumLayoutSize(Container target) {
- Dimension dim = new Dimension(0, 0);
- int nmembers = target.countComponents();
-
- for(int i = 0; i < nmembers; ++i) {
- Component m = target.getComponent(i);
- if (m.visible) {
- Dimension d = m.minimumSize();
- dim.height = Math.max(dim.height, d.height);
- if (i > 0) {
- dim.width += this.hgap;
- }
-
- dim.width += d.width;
- }
- }
-
- Insets insets = target.insets();
- dim.width += insets.left + insets.right + this.hgap * 2;
- dim.height += insets.top + insets.bottom + this.vgap * 2;
- return dim;
- }
-
- private void moveComponents(Container target, int x, int y, int width, int height, int rowStart, int rowEnd) {
- switch (this.align) {
- case 0:
- default:
- break;
- case 1:
- x += width / 2;
- break;
- case 2:
- x += width;
- }
-
- for(int i = rowStart; i < rowEnd; ++i) {
- Component m = target.getComponent(i);
- if (m.visible) {
- m.move(x, y + (height - m.height) / 2);
- x += this.hgap + m.width;
- }
- }
-
- }
-
- public void layoutContainer(Container target) {
- Insets insets = target.insets();
- int maxwidth = target.width - (insets.left + insets.right + this.hgap * 2);
- int nmembers = target.countComponents();
- int x = 0;
- int y = insets.top + this.vgap;
- int rowh = 0;
- int start = 0;
-
- for(int i = 0; i < nmembers; ++i) {
- Component m = target.getComponent(i);
- if (m.visible) {
- Dimension d = m.preferredSize();
- m.resize(d.width, d.height);
- if (x != 0 && x + d.width > maxwidth) {
- this.moveComponents(target, insets.left + this.hgap, y, maxwidth - x, rowh, start, i);
- x = d.width;
- y += this.vgap + rowh;
- rowh = d.height;
- start = i;
- } else {
- if (x > 0) {
- x += this.hgap;
- }
-
- x += d.width;
- rowh = Math.max(rowh, d.height);
- }
- }
- }
-
- this.moveComponents(target, insets.left + this.hgap, y, maxwidth - x, rowh, start, nmembers);
- }
-
- public String toString() {
- String str = "";
- switch (this.align) {
- case 0:
- str = ",align=left";
- break;
- case 1:
- str = ",align=center";
- break;
- case 2:
- str = ",align=right";
- }
-
- return this.getClass().getName() + "[hgap=" + this.hgap + ",vgap=" + this.vgap + str + "]";
- }
- }
-