📄 borderlayout.java
字号:
else if (str.equals(SOUTH)) south = component; else if (str.equals(EAST)) east = component; else if (str.equals(WEST)) west = component; else if (str.equals(BEFORE_FIRST_LINE)) firstLine = component; else if (str.equals(AFTER_LAST_LINE)) lastLine = component; else if (str.equals(BEFORE_LINE_BEGINS)) firstItem = component; else if (str.equals(AFTER_LINE_ENDS)) lastItem = component; else throw new IllegalArgumentException("Constraint value not valid: " + str);}/*************************************************************************//** * Adds a component to the layout in the specified constraint position, * which must be one of the string constants defined in this class. * * @param constraints The constraint string. * @param component The component to add. * * @exception IllegalArgumentException If the constraint object is not * one of the specified constants in this class. * * @deprecated This method is deprecated in favor of * <code>addLayoutComponent(Component, Object)</code>. */public voidaddLayoutComponent(String constraints, Component component){ addLayoutComponent(component, constraints);}/*************************************************************************//** * Removes the specified component from the layout. * * @param component The component to remove from the layout. */public voidremoveLayoutComponent(Component component){ if (north == component) north = null; if (south == component) south = null; if (east == component) east = null; if (west == component) west = null; if (center == component) center = null; if (firstItem == component) firstItem = null; if (lastItem == component) lastItem = null; if (firstLine == component) firstLine = null; if (lastLine == component) lastLine = null;}/*************************************************************************//** * Returns the minimum size of the specified container using this layout. * * @param target The container to calculate the minimum size for. * * @return The minimum size of the container */public Dimension minimumLayoutSize(Container target){ return calcSize(target, MIN);}/*************************************************************************//** * Returns the preferred size of the specified container using this layout. * * @param target The container to calculate the preferred size for. * * @return The preferred size of the container */public Dimension preferredLayoutSize(Container target){ return calcSize(target, PREF);}/*************************************************************************//** * Returns the maximum size of the specified container using this layout. * * @param target The container to calculate the maximum size for. * * @return The maximum size of the container */public Dimension maximumLayoutSize(Container target){ return calcSize(target, MAX);}/*************************************************************************//** * Returns the X axis alignment, which is a <code>float</code> indicating * where along the X axis this container wishs to position its layout. * 0 indicates align to the left, 1 indicates align to the right, and 0.5 * indicates align to the center. * * @param parent The parent container. * * @return The X alignment value. */public floatgetLayoutAlignmentX(Container parent){ return(parent.getAlignmentX());}/*************************************************************************//** * Returns the Y axis alignment, which is a <code>float</code> indicating * where along the Y axis this container wishs to position its layout. * 0 indicates align to the top, 1 indicates align to the bottom, and 0.5 * indicates align to the center. * * @param parent The parent container. * * @return The Y alignment value. */public floatgetLayoutAlignmentY(Container parent){ return(parent.getAlignmentY());}/*************************************************************************//** * Instructs this object to discard any layout information it might * have cached. * * @param parent The parent container. */public voidinvalidateLayout(Container parent){}/*************************************************************************//** * Lays out the specified container according to the constraints * in this object. * * @param target The container to lay out. */public voidlayoutContainer(Container target){ synchronized (target.getTreeLock ()) { Insets i = target.getInsets(); ComponentOrientation orient = target.getComponentOrientation (); boolean left_to_right = orient.isLeftToRight (); Component my_north = north; Component my_east = east; Component my_south = south; Component my_west = west; // Note that we currently don't handle vertical layouts. Neither // does JDK 1.3. if (firstLine != null) my_north = firstLine; if (lastLine != null) my_south = lastLine; if (firstItem != null) { if (left_to_right) my_west = firstItem; else my_east = firstItem; } if (lastItem != null) { if (left_to_right) my_east = lastItem; else my_west = lastItem; } Dimension c = calcCompSize(center, PREF); Dimension n = calcCompSize(my_north, PREF); Dimension s = calcCompSize(my_south, PREF); Dimension e = calcCompSize(my_east, PREF); Dimension w = calcCompSize(my_west, PREF); Dimension t = target.getSize(); /* <-> hgap <-> hgap +----------------------------+ } |t | } i.top | +----------------------+ | --- y1 } | |n | | | +----------------------+ | } vgap | +---+ +----------+ +---+ | --- y2 } } | |w | |c | |e | | } hh | +---+ +----------+ +---+ | } vgap } | +----------------------+ | --- y3 } | |s | | | +----------------------+ | } | | } i.bottom +----------------------------+ } |x1 |x2 |x3 <----------------------> <--> ww <--> i.left i.right */ int x1 = i.left; int x2 = x1 + w.width + hgap; int x3 = t.width - i.right - e.width; int ww = t.width - i.right - i.left; int y1 = i.top; int y2 = y1 + n.height + vgap; int y3 = t.height - i.bottom - s.height; int hh = y3-y2-vgap; setBounds(center, x2, y2, x3-x2-hgap, hh); setBounds(my_north, x1, y1, ww, n.height); setBounds(my_south, x1, y3, ww, s.height); setBounds(my_west, x1, y2, w.width, hh); setBounds(my_east, x3, y2, e.width, hh); }}/*************************************************************************//** * Returns a string representation of this layout manager. * * @return A string representation of this object. */public StringtoString(){ return getClass().getName() + "[hgap=" + hgap + ",vgap=" + vgap + "]";}private voidsetBounds(Component comp, int x, int y, int w, int h){ if (comp == null) return; comp.setBounds(x, y, w, h);}// Some constants for use with calcSize().private static final int MIN = 0;private static final int MAX = 1;private static final int PREF = 2;private DimensioncalcCompSize(Component comp, int what){ if (comp == null) return new Dimension(0, 0); if (what == MIN) return comp.getMinimumSize(); else if (what == MAX) return comp.getMaximumSize(); return comp.getPreferredSize();}// This is a helper function used to compute the various sizes for// this layout.private DimensioncalcSize(Container target, int what){ synchronized (target.getTreeLock ()) { Insets ins = target.getInsets(); ComponentOrientation orient = target.getComponentOrientation (); boolean left_to_right = orient.isLeftToRight (); Component my_north = north; Component my_east = east; Component my_south = south; Component my_west = west; // Note that we currently don't handle vertical layouts. Neither // does JDK 1.3. if (firstLine != null) my_north = firstLine; if (lastLine != null) my_south = lastLine; if (firstItem != null) { if (left_to_right) my_west = firstItem; else my_east = firstItem; } if (lastItem != null) { if (left_to_right) my_east = lastItem; else my_west = lastItem; } Dimension ndim = calcCompSize(my_north, what); Dimension sdim = calcCompSize(my_south, what); Dimension edim = calcCompSize(my_east, what); Dimension wdim = calcCompSize(my_west, what); Dimension cdim = calcCompSize(center, what); int width = edim.width + cdim.width + wdim.width + (hgap * 2); if (ndim.width > width) width = ndim.width; if (sdim.width > width) width = sdim.width; width += (ins.left + ins.right); int height = edim.height; if (cdim.height > height) height = cdim.height; if (wdim.height > height) height = wdim.height; height += (ndim.height + sdim.height + (vgap * 2) + ins.top + ins.bottom); return(new Dimension(width, height)); }}} // class BorderLayout
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -