home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 January / PCO0198.ISO / 1&1 / java.z / java_301 / java / awt / FlowLayout.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-10-20  |  3.9 KB  |  149 lines

  1. package java.awt;
  2.  
  3. public class FlowLayout implements LayoutManager {
  4.    public static final int LEFT = 0;
  5.    public static final int CENTER = 1;
  6.    public static final int RIGHT = 2;
  7.    int align;
  8.    int hgap;
  9.    int vgap;
  10.  
  11.    public FlowLayout() {
  12.       this(1, 5, 5);
  13.    }
  14.  
  15.    public FlowLayout(int align) {
  16.       this(align, 5, 5);
  17.    }
  18.  
  19.    public FlowLayout(int align, int hgap, int vgap) {
  20.       this.align = align;
  21.       this.hgap = hgap;
  22.       this.vgap = vgap;
  23.    }
  24.  
  25.    public void addLayoutComponent(String name, Component comp) {
  26.    }
  27.  
  28.    public void removeLayoutComponent(Component comp) {
  29.    }
  30.  
  31.    public Dimension preferredLayoutSize(Container target) {
  32.       Dimension dim = new Dimension(0, 0);
  33.       int nmembers = target.countComponents();
  34.  
  35.       for(int i = 0; i < nmembers; ++i) {
  36.          Component m = target.getComponent(i);
  37.          if (m.visible) {
  38.             Dimension d = m.preferredSize();
  39.             dim.height = Math.max(dim.height, d.height);
  40.             if (i > 0) {
  41.                dim.width += this.hgap;
  42.             }
  43.  
  44.             dim.width += d.width;
  45.          }
  46.       }
  47.  
  48.       Insets insets = target.insets();
  49.       dim.width += insets.left + insets.right + this.hgap * 2;
  50.       dim.height += insets.top + insets.bottom + this.vgap * 2;
  51.       return dim;
  52.    }
  53.  
  54.    public Dimension minimumLayoutSize(Container target) {
  55.       Dimension dim = new Dimension(0, 0);
  56.       int nmembers = target.countComponents();
  57.  
  58.       for(int i = 0; i < nmembers; ++i) {
  59.          Component m = target.getComponent(i);
  60.          if (m.visible) {
  61.             Dimension d = m.minimumSize();
  62.             dim.height = Math.max(dim.height, d.height);
  63.             if (i > 0) {
  64.                dim.width += this.hgap;
  65.             }
  66.  
  67.             dim.width += d.width;
  68.          }
  69.       }
  70.  
  71.       Insets insets = target.insets();
  72.       dim.width += insets.left + insets.right + this.hgap * 2;
  73.       dim.height += insets.top + insets.bottom + this.vgap * 2;
  74.       return dim;
  75.    }
  76.  
  77.    private void moveComponents(Container target, int x, int y, int width, int height, int rowStart, int rowEnd) {
  78.       switch (this.align) {
  79.          case 0:
  80.          default:
  81.             break;
  82.          case 1:
  83.             x += width / 2;
  84.             break;
  85.          case 2:
  86.             x += width;
  87.       }
  88.  
  89.       for(int i = rowStart; i < rowEnd; ++i) {
  90.          Component m = target.getComponent(i);
  91.          if (m.visible) {
  92.             m.move(x, y + (height - m.height) / 2);
  93.             x += this.hgap + m.width;
  94.          }
  95.       }
  96.  
  97.    }
  98.  
  99.    public void layoutContainer(Container target) {
  100.       Insets insets = target.insets();
  101.       int maxwidth = target.width - (insets.left + insets.right + this.hgap * 2);
  102.       int nmembers = target.countComponents();
  103.       int x = 0;
  104.       int y = insets.top + this.vgap;
  105.       int rowh = 0;
  106.       int start = 0;
  107.  
  108.       for(int i = 0; i < nmembers; ++i) {
  109.          Component m = target.getComponent(i);
  110.          if (m.visible) {
  111.             Dimension d = m.preferredSize();
  112.             m.resize(d.width, d.height);
  113.             if (x != 0 && x + d.width > maxwidth) {
  114.                this.moveComponents(target, insets.left + this.hgap, y, maxwidth - x, rowh, start, i);
  115.                x = d.width;
  116.                y += this.vgap + rowh;
  117.                rowh = d.height;
  118.                start = i;
  119.             } else {
  120.                if (x > 0) {
  121.                   x += this.hgap;
  122.                }
  123.  
  124.                x += d.width;
  125.                rowh = Math.max(rowh, d.height);
  126.             }
  127.          }
  128.       }
  129.  
  130.       this.moveComponents(target, insets.left + this.hgap, y, maxwidth - x, rowh, start, nmembers);
  131.    }
  132.  
  133.    public String toString() {
  134.       String str = "";
  135.       switch (this.align) {
  136.          case 0:
  137.             str = ",align=left";
  138.             break;
  139.          case 1:
  140.             str = ",align=center";
  141.             break;
  142.          case 2:
  143.             str = ",align=right";
  144.       }
  145.  
  146.       return this.getClass().getName() + "[hgap=" + this.hgap + ",vgap=" + this.vgap + str + "]";
  147.    }
  148. }
  149.