- /*
- * @(#)SmartGridLayout.java 1.4 00/02/02
- *
- * Copyright 1998-2000 Sun Microsystems, Inc. All Rights Reserved.
- *
- * This software is the proprietary information of Sun Microsystems, Inc.
- * Use is subject to license terms.
- *
- */
-
- package javax.swing.colorchooser;
-
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.event.*;
- import javax.swing.text.*;
- import java.io.Serializable;
-
-
- /**
- * A better GridLayout class
- *
- * @version 1.4 02/02/00
- * @author Steve Wilson
- */
- class SmartGridLayout implements LayoutManager, Serializable {
-
- int rows = 2;
- int columns = 2;
- int xGap = 2;
- int yGap = 2;
- int componentCount = 0;
- Component[][] layoutGrid;
-
-
- public SmartGridLayout(int numColumns, int numRows) {
- rows = numRows;
- columns = numColumns;
- layoutGrid = new Component[numColumns][numRows];
-
- }
-
-
- public void layoutContainer(Container c) {
-
- buildLayoutGrid(c);
-
- int[] rowHeights = new int[rows];
- int[] columnWidths = new int[columns];
-
- for (int row = 0; row < rows; row++) {
- rowHeights[row] = computeRowHeight(row);
- }
-
- for (int column = 0; column < columns; column++) {
- columnWidths[column] = computeColumnWidth(column);
- }
-
-
- Insets insets = c.getInsets();
- int horizLoc = insets.left;
-
-
-
- for (int column = 0; column < columns; column++) {
- int vertLoc = insets.top;
-
- for (int row = 0; row < rows; row++) {
- Component current = layoutGrid[column][row];
- current.setBounds(horizLoc, vertLoc, columnWidths[column], rowHeights[row]);
- // System.out.println(current.getBounds());
- vertLoc += (rowHeights[row] + yGap);
- }
- horizLoc += (columnWidths[column] + xGap );
- }
-
-
-
- }
-
- public Dimension minimumLayoutSize(Container c) {
-
- buildLayoutGrid(c);
- Insets insets = c.getInsets();
-
-
-
- int height = 0;
- int width = 0;
-
- for (int row = 0; row < rows; row++) {
- height += computeRowHeight(row);
- }
-
- for (int column = 0; column < columns; column++) {
- width += computeColumnWidth(column);
- }
-
- height += (yGap * (rows - 1)) + insets.top + insets.bottom;
- width += (xGap * (columns - 1)) + insets.right + insets.left;
-
- return new Dimension(width, height);
-
-
- }
-
- public Dimension preferredLayoutSize(Container c) {
- return minimumLayoutSize(c);
- }
-
-
- public void addLayoutComponent(String s, Component c) {}
-
- public void removeLayoutComponent(Component c) {}
-
-
- private void buildLayoutGrid(Container c) {
-
- Component[] children = c.getComponents();
-
- for (int componentCount = 0; componentCount < children.length; componentCount++) {
- // System.out.println("Children: " +componentCount);
- int row = 0;
- int column = 0;
-
- if (componentCount != 0) {
- column = componentCount % columns;
- row = (componentCount - column) / columns;
- }
-
- // System.out.println("inserting into: "+ column + " " + row);
-
- layoutGrid[column][row] = children[componentCount];
- }
- }
-
- private int computeColumnWidth(int columnNum) {
- int maxWidth = 1;
- for (int row = 0; row < rows; row++) {
- int width = layoutGrid[columnNum][row].getPreferredSize().width;
- if (width > maxWidth) {
- maxWidth = width;
- }
- }
- return maxWidth;
- }
-
- private int computeRowHeight(int rowNum) {
- int maxHeight = 1;
- for (int column = 0; column < columns; column++) {
- int height = layoutGrid[column][rowNum].getPreferredSize().height;
- if (height > maxHeight) {
- maxHeight = height;
- }
- }
- return maxHeight;
- }
-
- }