/// <summary> /// Lays out the container argument using this border layout. /// <para> /// This method actually reshapes the components in the specified /// container in order to satisfy the constraints of this /// <code>BorderLayout</code> object. The <code>NORTH</code> /// and <code>SOUTH</code> components, if any, are placed at /// the top and bottom of the container, respectively. The /// <code>WEST</code> and <code>EAST</code> components are /// then placed on the left and right, respectively. Finally, /// the <code>CENTER</code> object is placed in any remaining /// space in the middle. /// </para> /// <para> /// Most applications do not call this method directly. This method /// is called when a container calls its <code>doLayout</code> method. /// </para> /// </summary> /// <param name="target"> the container in which to do the layout. </param> /// <seealso cref= java.awt.Container </seealso> /// <seealso cref= java.awt.Container#doLayout() </seealso> public virtual void LayoutContainer(Container target) { lock (target.TreeLock) { Insets insets = target.Insets; int top = insets.Top; int bottom = target.Height_Renamed - insets.Bottom; int left = insets.Left; int right = target.Width_Renamed - insets.Right; bool ltr = target.ComponentOrientation.LeftToRight; Component c = null; if ((c = GetChild(NORTH, ltr)) != null) { c.SetSize(right - left, c.Height_Renamed); Dimension d = c.PreferredSize; c.SetBounds(left, top, right - left, d.Height_Renamed); top += d.Height_Renamed + Vgap_Renamed; } if ((c = GetChild(SOUTH, ltr)) != null) { c.SetSize(right - left, c.Height_Renamed); Dimension d = c.PreferredSize; c.SetBounds(left, bottom - d.Height_Renamed, right - left, d.Height_Renamed); bottom -= d.Height_Renamed + Vgap_Renamed; } if ((c = GetChild(EAST, ltr)) != null) { c.SetSize(c.Width_Renamed, bottom - top); Dimension d = c.PreferredSize; c.SetBounds(right - d.Width_Renamed, top, d.Width_Renamed, bottom - top); right -= d.Width_Renamed + Hgap_Renamed; } if ((c = GetChild(WEST, ltr)) != null) { c.SetSize(c.Width_Renamed, bottom - top); Dimension d = c.PreferredSize; c.SetBounds(left, top, d.Width_Renamed, bottom - top); left += d.Width_Renamed + Hgap_Renamed; } if ((c = GetChild(CENTER, ltr)) != null) { c.SetBounds(left, top, right - left, bottom - top); } } }
/// <summary> /// Lays out the container. This method lets each /// <i>visible</i> component take /// its preferred size by reshaping the components in the /// target container in order to satisfy the alignment of /// this <code>FlowLayout</code> object. /// </summary> /// <param name="target"> the specified component being laid out </param> /// <seealso cref= Container </seealso> /// <seealso cref= java.awt.Container#doLayout </seealso> public virtual void LayoutContainer(Container target) { lock (target.TreeLock) { Insets insets = target.Insets; int maxwidth = target.Width_Renamed - (insets.Left + insets.Right + Hgap_Renamed * 2); int nmembers = target.ComponentCount; int x = 0, y = insets.Top + Vgap_Renamed; int rowh = 0, start = 0; bool ltr = target.ComponentOrientation.LeftToRight; bool useBaseline = AlignOnBaseline; int[] ascent = null; int[] descent = null; if (useBaseline) { ascent = new int[nmembers]; descent = new int[nmembers]; } for (int i = 0; i < nmembers; i++) { Component m = target.GetComponent(i); if (m.Visible) { Dimension d = m.PreferredSize; m.SetSize(d.Width_Renamed, d.Height_Renamed); if (useBaseline) { int baseline = m.GetBaseline(d.Width_Renamed, d.Height_Renamed); if (baseline >= 0) { ascent[i] = baseline; descent[i] = d.Height_Renamed - baseline; } else { ascent[i] = -1; } } if ((x == 0) || ((x + d.Width_Renamed) <= maxwidth)) { if (x > 0) { x += Hgap_Renamed; } x += d.Width_Renamed; rowh = System.Math.Max(rowh, d.Height_Renamed); } else { rowh = MoveComponents(target, insets.Left + Hgap_Renamed, y, maxwidth - x, rowh, start, i, ltr, useBaseline, ascent, descent); x = d.Width_Renamed; y += Vgap_Renamed + rowh; rowh = d.Height_Renamed; start = i; } } } MoveComponents(target, insets.Left + Hgap_Renamed, y, maxwidth - x, rowh, start, nmembers, ltr, useBaseline, ascent, descent); } }