001 /* 002 * Created on Mar 2, 2008 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 005 * in compliance with the License. You may obtain a copy of the License at 006 * 007 * http://www.apache.org/licenses/LICENSE-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, software distributed under the License 010 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 011 * or implied. See the License for the specific language governing permissions and limitations under 012 * the License. 013 * 014 * Copyright @2008-2010 the original author or authors. 015 */ 016 package org.fest.swing.data; 017 018 import static java.lang.String.valueOf; 019 import static org.fest.util.Objects.HASH_CODE_PRIME; 020 import static org.fest.util.Strings.concat; 021 022 import javax.swing.JTable; 023 024 /** 025 * Understands a cell in a <code>{@link JTable}</code>. 026 * 027 * @author Alex Ruiz 028 */ 029 public class TableCell { 030 031 /** The row of the cell. */ 032 public final int row; 033 034 /** The column of the cell. */ 035 public final int column; 036 037 /** 038 * Starting point for the creation of a <code>{@link TableCell}</code>. 039 * <p> 040 * Example: 041 * <pre> 042 * // import static org.fest.swing.data.TableCell.row; 043 * TableCell cell = row(5).column(3); 044 * </pre> 045 * </p> 046 * @param row the row index of the table cell to create. 047 * @return the created builder. 048 */ 049 public static TableCellBuilder row(int row) { return new TableCellBuilder(row); } 050 051 /** 052 * Understands creation of <code>{@link TableCell}</code>s. 053 * 054 * @author Alex Ruiz 055 */ 056 public static class TableCellBuilder { 057 private final int row; 058 059 TableCellBuilder(int row) { this.row = row; } 060 061 /** 062 * Creates a new table cell using the row index specified in <code>{@link TableCellBuilder#row(int)}</code> and the 063 * column index specified as the argument in this method. 064 * @param column the column index of the table cell to create. 065 * @return the created table cell. 066 */ 067 public TableCell column(int column) { return new TableCell(row, column); } 068 } 069 070 /** 071 * Creates a new </code>{@link TableCell}</code>. 072 * @param row the row of the cell. 073 * @param column the column of the cell. 074 */ 075 protected TableCell(int row, int column) { 076 this.row = row; 077 this.column = column; 078 } 079 080 /** ${@inheritDoc} */ 081 @Override public boolean equals(Object obj) { 082 if (this == obj) return true; 083 if (obj == null) return false; 084 if (!(obj instanceof TableCell)) return false; 085 TableCell other = (TableCell) obj; 086 if (row != other.row) return false; 087 return column == other.column; 088 } 089 090 /** ${@inheritDoc} */ 091 @Override public int hashCode() { 092 int result = 1; 093 result = HASH_CODE_PRIME * result + column; 094 result = HASH_CODE_PRIME * result + row; 095 return result; 096 } 097 098 @Override public String toString() { 099 return concat("[row=", valueOf(row), ", column=", valueOf(column), "]"); 100 } 101 }