View Javadoc

    1   /*
    2    * @(#)TablePanel.java Sep 21, 2003
    3    *
    4    * Copyright (c) 2002-2005 Delft University of Technology Jaffalaan 5, 2628 BX
    5    * Delft, the Netherlands. All rights reserved.
    6    *
    7    * This software is proprietary information of Delft University of Technology
    8    * The code is published under the Lesser General Public License
    9    */
    10  package nl.tudelft.simulation.dsol.gui.panels;
    11
    12  import info.clearthought.layout.TableLayout;
    13  import info.clearthought.layout.TableLayoutConstants;
    14
    15  import java.awt.Component;
    16  import java.awt.Point;
    17
    18  import javax.swing.JPanel;
    19  import javax.swing.table.DefaultTableModel;
    20
    21
    22  /***
    23   * The tablePanel provides an easy to access table for the DSOL Framework <br>
    24   * (c) copyright 2002-2005 <a href="http://www.simulation.tudelft.nl">Delft
    25   * University of Technology </a>, the Netherlands. <br>
    26   * See for project information <a href="http://www.simulation.tudelft.nl">
    27   * www.simulation.tudelft.nl </a> <br>
    28   * License of use: <a href="http://www.gnu.org/copyleft/lesser.html">Lesser
    29   * General Public License (LGPL) </a>, no warranty.
    30   *
    31   * @version $Revision: 1.5 $ $Date: 2005/01/13 16:28:55 $
    32   * @author <a href="http://www.tbm.tudelft.nl/webstaf/peterja/index.htm">Peter
    33   *         Jacobs </a>
    34   */
    35  public class TablePanel extends JPanel
    36  {
    37  	/*** the content of the tablePanel */
    38  	private DefaultTableModel content = null;
    39
    40  	/***
    41  	 * Constructor for TablePanel.
    42  	 *
    43  	 * @param columns the amount of columns
    44  	 * @param rows the amount of rows
    45  	 */
    46  	public TablePanel(final int rows, final int columns)
    47  	{
    48  		super();
    49  		this.content = new DefaultTableModel(rows, columns);
    50  	}
    51
    52  	/***
    53  	 * adds a row to the tablePanel
    54  	 */
    55  	public void addRow()
    56  	{
    57  		this.content.addRow((Object[]) null);
    58  		this.validate();
    59  	}
    60
    61  	/***
    62  	 * adds a column to the tablePanel
    63  	 */
    64  	public void addColumn()
    65  	{
    66  		this.content.addColumn((Object[]) null);
    67  		this.validate();
    68  	}
    69
    70  	/***
    71  	 * deletes a row from the contentpanel
    72  	 */
    73  	public void deleteRow()
    74  	{
    75  		if (this.content.getRowCount() == 1)
    76  		{
    77  			return;
    78  		}
    79  		this.content.removeRow(this.content.getRowCount() - 1);
    80  		this.validate();
    81  	}
    82
    83  	/***
    84  	 * deletes a column from the tablePanel
    85  	 */
    86  	public void deleteColumn()
    87  	{
    88  		if (this.content.getColumnCount() == 1)
    89  		{
    90  			return;
    91  		}
    92  		DefaultTableModel result = new DefaultTableModel(this.content
    93  				.getRowCount(), this.content.getColumnCount() - 1);
    94  		for (int rows = 0; rows < this.content.getRowCount(); rows++)
    95  		{
    96  			for (int cols = 0; cols < this.content.getColumnCount() - 1; cols++)
    97  			{
    98  				result.setValueAt(this.content.getValueAt(rows, cols), rows,
    99  						cols);
    100 			}
    101 		}
    102 		this.content = result;
    103 		this.validate();
    104 	}
    105
    106 	/***
    107 	 * returns the row of a specific point
    108 	 *
    109 	 * @param point the xy-point
    110 	 * @return int the row
    111 	 */
    112 	public int getRow(final Point point)
    113 	{
    114 		double heigth = this.getHeight() / (double) this.getRows();
    115 		return (int) Math.floor(point.getY() / heigth);
    116 	}
    117
    118 	/***
    119 	 * returns the column of a point on the panel
    120 	 *
    121 	 * @param point the x-y point
    122 	 * @return int the column
    123 	 */
    124 	public int getColumn(final Point point)
    125 	{
    126 		double width = this.getWidth() / (double) this.getColumns();
    127 		return (int) Math.floor(point.getX() / width);
    128 	}
    129
    130 	/***
    131 	 * Method setCell.
    132 	 *
    133 	 * @param container the subject of the cell
    134 	 * @param row of the cell
    135 	 * @param column of the cell
    136 	 */
    137 	public void setCell(final Component container, final int row,
    138 			final int column)
    139 	{
    140 		this.content.setValueAt(container, row, column);
    141 		this.validate();
    142 	}
    143
    144 	/***
    145 	 * contains this container
    146 	 *
    147 	 * @param container contains the container..
    148 	 * @return boolean
    149 	 */
    150 	public boolean contains(final Component container)
    151 	{
    152 		for (int c = 0; c < this.getColumns(); c++)
    153 		{
    154 			for (int r = 0; r < this.getRows(); r++)
    155 			{
    156 				if (this.getCell(r, c).equals(container))
    157 				{
    158 					return true;
    159 				}
    160 			}
    161 		}
    162 		return false;
    163 	}
    164
    165 	/***
    166 	 * gets the container in a cell
    167 	 *
    168 	 * @param row the row
    169 	 * @param column the column
    170 	 * @return Component
    171 	 */
    172 	public Component getCell(final int row, final int column)
    173 	{
    174 		double height = this.getHeight() / (double) this.getRows();
    175 		double width = this.getWidth() / (double) this.getColumns();
    176 		Point point = new Point((int) Math.round((column + 0.5) * width),
    177 				(int) Math.round((row + 0.5) * height));
    178 		return this.getComponentAt(point.x, point.y);
    179 	}
    180
    181 	/***
    182 	 * removes the content of a cell
    183 	 *
    184 	 * @param row the row
    185 	 * @param column the column
    186 	 */
    187 	public void removeCell(final int row, final int column)
    188 	{
    189 		this.remove(this.getCell(row, column));
    190 	}
    191
    192 	/***
    193 	 * Method refractor computes the size
    194 	 *
    195 	 * @param number refers to the number of rows/columns
    196 	 * @return double[] the result
    197 	 */
    198 	private double[] refractor(final int number)
    199 	{
    200 		double[] result = new double[number];
    201 		for (int i = 0; i < result.length; i++)
    202 		{
    203 			result[i] = 1.0 / number * 1.0;
    204 			if (result[i] == 1.0)
    205 			{
    206 				result[i] = TableLayoutConstants.FILL;
    207 			}
    208 		}
    209 		return result;
    210 	}
    211
    212 	/***
    213 	 * returns the number of Columns
    214 	 *
    215 	 * @return int
    216 	 */
    217 	public int getColumns()
    218 	{
    219 		return this.content.getColumnCount();
    220 	}
    221
    222 	/***
    223 	 * returns the number of rows
    224 	 *
    225 	 * @return int the number of rows
    226 	 */
    227 	public int getRows()
    228 	{
    229 		return this.content.getRowCount();
    230 	}
    231
    232 	/***
    233 	 * @see java.awt.Component#validate()
    234 	 */
    235 	public void validate()
    236 	{
    237 		this.removeAll();
    238 		double[][] tableDefinition = {
    239 				this.refractor(this.content.getColumnCount()),
    240 				this.refractor(this.content.getRowCount())};
    241 		TableLayout layout = new TableLayout(tableDefinition);
    242 		this.setLayout(layout);
    243 		for (int rows = 0; rows < this.content.getRowCount(); rows++)
    244 		{
    245 			for (int cols = 0; cols < this.content.getColumnCount(); cols++)
    246 			{
    247 				Component component = (Component) this.content.getValueAt(rows,
    248 						cols);
    249 				if (component != null)
    250 				{
    251 					this.add(component, "" + cols + "," + rows + ",C,C");
    252 				}
    253 			}
    254 		}
    255 		super.validate();
    256 		super.repaint();
    257 	}
    258 }