borderlayout.java
来自「linux下建立JAVA虚拟机的源码KAFFE」· Java 代码 · 共 743 行 · 第 1/2 页
JAVA
743 行
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 new Dimension (Integer.MAX_VALUE, Integer.MAX_VALUE); } /** * 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 float getLayoutAlignmentX(Container parent) { return 0.5F; } /** * 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 float getLayoutAlignmentY(Container parent) { return 0.5F; } /** * Instructs this object to discard any layout information it might * have cached. * * @param parent The parent container. */ public void invalidateLayout(Container parent) { // Nothing to do here. } /** * Lays out the specified container according to the constraints in this * object. * * @param target The container to lay out. */ public void layoutContainer(Container target) { synchronized (target.getTreeLock()) { Insets i = target.getInsets(); int top = i.top; int bottom = target.height - i.bottom; int left = i.left; int right = target.width - i.right; boolean left_to_right = target.getComponentOrientation().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; } if (my_north != null) { Dimension n = calcCompSize(my_north, PREF); my_north.setBounds(left, top, right - left, n.height); top += n.height + vgap; } if (my_south != null) { Dimension s = calcCompSize(my_south, PREF); my_south.setBounds(left, bottom - s.height, right - left, s.height); bottom -= s.height + vgap; } if (my_east != null) { Dimension e = calcCompSize(my_east, PREF); my_east.setBounds(right - e.width, top, e.width, bottom - top); right -= e.width + hgap; } if (my_west != null) { Dimension w = calcCompSize(my_west, PREF); my_west.setBounds(left, top, w.width, bottom - top); left += w.width + hgap; } if (center != null) center.setBounds(left, top, right - left, bottom - top); } } /** * Returns a string representation of this layout manager. * * @return A string representation of this object. */ public String toString() { return getClass().getName() + "[hgap=" + hgap + ",vgap=" + vgap + "]"; } private Dimension calcCompSize(Component comp, int what) { if (comp == null || ! comp.isVisible()) 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 Dimension calcSize(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); // Check for overflow. if (width < edim.width || width < cdim.width || width < cdim.width) width = Integer.MAX_VALUE; 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; int addedHeight = height + (ndim.height + sdim.height + (vgap * 2) + ins.top + ins.bottom); // Check for overflow. if (addedHeight < height) height = Integer.MAX_VALUE; else height = addedHeight; return(new Dimension(width, height)); } } /** * Return the component at the indicated location, or null if no component * is at that location. The constraints argument must be one of the * location constants specified by this class. * @param constraints the location * @return the component at that location, or null * @throws IllegalArgumentException if the constraints argument is not * recognized * @since 1.5 */ public Component getLayoutComponent(Object constraints) { if (constraints == CENTER) return center; if (constraints == NORTH) return north; if (constraints == EAST) return east; if (constraints == SOUTH) return south; if (constraints == WEST) return west; if (constraints == PAGE_START) return firstLine; if (constraints == PAGE_END) return lastLine; if (constraints == LINE_START) return firstItem; if (constraints == LINE_END) return lastItem; throw new IllegalArgumentException("constraint " + constraints + " is not recognized"); } /** * Return the component at the specified location, which must be one * of the absolute constants such as CENTER or SOUTH. The container's * orientation is used to map this location to the correct corresponding * component, so for instance in a right-to-left container, a request * for the EAST component could return the LINE_END component. This will * return null if no component is available at the given location. * @param container the container whose orientation is used * @param constraints the absolute location of the component * @return the component at the location, or null * @throws IllegalArgumentException if the constraint is not recognized */ public Component getLayoutComponent(Container container, Object constraints) { ComponentOrientation orient = container.getComponentOrientation(); if (constraints == CENTER) return center; // Note that we don't support vertical layouts. if (constraints == NORTH) return north; if (constraints == SOUTH) return south; if (constraints == WEST) { // Note that relative layout takes precedence. if (orient.isLeftToRight()) return firstItem == null ? west : firstItem; return lastItem == null ? west : lastItem; } if (constraints == EAST) { // Note that relative layout takes precedence. if (orient.isLeftToRight()) return lastItem == null ? east : lastItem; return firstItem == null ? east : firstItem; } throw new IllegalArgumentException("constraint " + constraints + " is not recognized"); } /** * Return the constraint corresponding to a component in this layout. * If the component is null, or is not in this layout, returns null. * Otherwise, this will return one of the constraint constants defined * in this class. * @param c the component * @return the constraint, or null * @since 1.5 */ public Object getConstraints(Component c) { if (c == null) return null; if (c == center) return CENTER; if (c == north) return NORTH; if (c == east) return EAST; if (c == south) return SOUTH; if (c == west) return WEST; if (c == firstLine) return PAGE_START; if (c == lastLine) return PAGE_END; if (c == firstItem) return LINE_START; if (c == lastItem) return LINE_END; return null; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?