⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 entrylayout.java

📁 codebook!
💻 JAVA
字号:
// package com.darwinsys.entrylayout;import java.awt.*;import java.util.*;/** A simple layout manager, for Entry areas like: * <PRE> *    Login: _______________ * Password: _______________ * </PRE> * Basically two (or more) columns of different, but constant, widths. * <b>Note: all columns must be the same height!</b>. * <P> * Construct instances by passing an array of the column width percentages * (as doubles, fractions from 0.1 to 0.9, so 40%,60% would be {0.4, 0.6}). * The length of this array uniquely determines the number of columns. * Columns are forced to be the relevant widths. * <b>Note:</b> As with GridLayout, the number of items  * added <B>must</B> be an even * multiple of the number of columns. If not, exceptions may be thrown! * @author Ian F. Darwin, ian@darwinsys.com * @version $Id: EntryLayout.java,v 1.4 2001/10/09 22:09:44 ian Exp $ */public class EntryLayout implements LayoutManager {	/** The array of widths, as decimal fractions (0.4 == 40%, etc.). */	protected final double[] widthPercentages;	/** The number of columns. */	protected final int COLUMNS;	/** The default padding */	protected final static int HPAD = 5, VPAD = 5;	/** The actual padding */	protected final int hpad, vpad;	/** True if the list of widths was valid. */	protected boolean validWidths = false;	/** Construct an EntryLayout with widths and padding specified.	 * @param widths	Array of doubles specifying column widths.	 * @param h			Horizontal padding between items	 * @param v			Vertical padding between items	 */	public EntryLayout(double[] widths, int h, int v) {		COLUMNS = widths.length;		widthPercentages = new double[COLUMNS];		for (int i=0; i<widths.length; i++) {			if (widths[i] >= 1.0)				throw new IllegalArgumentException(					"EntryLayout: widths must be fractions < 1");			widthPercentages[i] = widths[i];		}		validWidths = true;		hpad = h;		vpad = v;	}	/** Construct an EntryLayout with widths and with default padding amounts.	 * @param widths	Array of doubles specifying column widths.	 */	public EntryLayout(double[] widths) {		this(widths, HPAD, VPAD);	}	/** Adds the specified component with the specified constraint 	 * to the layout; required by LayoutManager but not used.	 */	public void addLayoutComponent(String name, Component comp) {		// nothing to do	}	/** Removes the specified component from the layout;	 * required by LayoutManager, but does nothing.	 */	public void removeLayoutComponent(Component comp)  {		// nothing to do	}	/** Calculates the preferred size dimensions for the specified panel 	 * given the components in the specified parent container. */	public Dimension preferredLayoutSize(Container parent)  {		// System.out.println("preferredLayoutSize");		return computeLayoutSize(parent, hpad, vpad);	}	/** Find the minimum Dimension for the 	 * specified container given the components therein.	 */	public Dimension minimumLayoutSize(Container parent)  {		// System.out.println("minimumLayoutSize");		return computeLayoutSize(parent, 0, 0);	}	/** The width of each column, as found by computLayoutSize(). */	int[] widths;	/** The height of each row, as found by computLayoutSize(). */	int[] heights;	/** Compute the size of the whole mess. Serves as the guts of 	 * preferredLayoutSize() and minimumLayoutSize().	 */	protected Dimension computeLayoutSize(Container parent, int hpad, int vpad) {		if (!validWidths)			return null;		Component[] components = parent.getComponents();		Dimension contSize = parent.getSize();		int preferredWidth = 0, preferredHeight = 0;		widths = new int[COLUMNS];		heights = new int[components.length / COLUMNS];		// System.out.println("Grid: " + widths.length + ", " + heights.length);		int i;		// Pass One: Compute largest widths and heights.		for (i=0; i<components.length; i++) {			int row = i / widthPercentages.length;			int col = i % widthPercentages.length;			Component c = components[i];			Dimension d = c.getPreferredSize();			widths[col] = Math.max(widths[col], d.width);			heights[row] = Math.max(heights[row], d.height);		}		// Pass two: agregate them.		for (i=0; i<widths.length; i++)			preferredWidth += widths[i] + hpad;		for (i=0; i<heights.length; i++)			preferredHeight += heights[i] + vpad;		// Finally, pass the sums back as the actual size.		return new Dimension(preferredWidth, preferredHeight);	}	/** Lays out the container in the specified panel. */	public void layoutContainer(Container parent) {		// System.out.println("layoutContainer:");		if (!validWidths)			return;		Component[] components = parent.getComponents();		Dimension contSize = parent.getSize();		for (int i=0; i<components.length; i++) {			int row = i / COLUMNS;			int col = i % COLUMNS;			Component c = components[i];			Dimension d = c.getPreferredSize();			int colWidth = (int)(contSize.width * widthPercentages[col]);			Rectangle r = new Rectangle(				col == 0 ? 0 :				hpad * (col-1) + (int)(contSize.width * widthPercentages[col-1]),				vpad * (row) + (row * heights[row]) + (heights[row]-d.height),				colWidth, d.height);			// System.out.println(c.getClass() + "-->" + r);			c.setBounds(r);		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -