1 /* 2 * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javax.swing.table; 27 28 import java.util.Enumeration; 29 import javax.swing.event.ChangeEvent; 30 import javax.swing.event.*; 31 import javax.swing.*; 32 33 34 /** 35 * Defines the requirements for a table column model object suitable for 36 * use with <code>JTable</code>. 37 * 38 * @author Alan Chung 39 * @author Philip Milne 40 * @see DefaultTableColumnModel 41 */ 42 public interface TableColumnModel 43 { 44 // 45 // Modifying the model 46 // 47 48 /** 49 * Appends <code>aColumn</code> to the end of the 50 * <code>tableColumns</code> array. 51 * This method posts a <code>columnAdded</code> 52 * event to its listeners. 53 * 54 * @param aColumn the <code>TableColumn</code> to be added 55 * @see #removeColumn 56 */ addColumn(TableColumn aColumn)57 public void addColumn(TableColumn aColumn); 58 59 /** 60 * Deletes the <code>TableColumn</code> <code>column</code> from the 61 * <code>tableColumns</code> array. This method will do nothing if 62 * <code>column</code> is not in the table's column list. 63 * This method posts a <code>columnRemoved</code> 64 * event to its listeners. 65 * 66 * @param column the <code>TableColumn</code> to be removed 67 * @see #addColumn 68 */ removeColumn(TableColumn column)69 public void removeColumn(TableColumn column); 70 71 /** 72 * Moves the column and its header at <code>columnIndex</code> to 73 * <code>newIndex</code>. The old column at <code>columnIndex</code> 74 * will now be found at <code>newIndex</code>. The column that used 75 * to be at <code>newIndex</code> is shifted left or right 76 * to make room. This will not move any columns if 77 * <code>columnIndex</code> equals <code>newIndex</code>. This method 78 * posts a <code>columnMoved</code> event to its listeners. 79 * 80 * @param columnIndex the index of column to be moved 81 * @param newIndex index of the column's new location 82 * @exception IllegalArgumentException if <code>columnIndex</code> or 83 * <code>newIndex</code> 84 * are not in the valid range 85 */ moveColumn(int columnIndex, int newIndex)86 public void moveColumn(int columnIndex, int newIndex); 87 88 /** 89 * Sets the <code>TableColumn</code>'s column margin to 90 * <code>newMargin</code>. This method posts 91 * a <code>columnMarginChanged</code> event to its listeners. 92 * 93 * @param newMargin the width, in pixels, of the new column margins 94 * @see #getColumnMargin 95 */ setColumnMargin(int newMargin)96 public void setColumnMargin(int newMargin); 97 98 // 99 // Querying the model 100 // 101 102 /** 103 * Returns the number of columns in the model. 104 * @return the number of columns in the model 105 */ getColumnCount()106 public int getColumnCount(); 107 108 /** 109 * Returns an <code>Enumeration</code> of all the columns in the model. 110 * @return an <code>Enumeration</code> of all the columns in the model 111 */ getColumns()112 public Enumeration<TableColumn> getColumns(); 113 114 /** 115 * Returns the index of the first column in the table 116 * whose identifier is equal to <code>identifier</code>, 117 * when compared using <code>equals</code>. 118 * 119 * @param columnIdentifier the identifier object 120 * @return the index of the first table column 121 * whose identifier is equal to <code>identifier</code> 122 * @exception IllegalArgumentException if <code>identifier</code> 123 * is <code>null</code>, or no 124 * <code>TableColumn</code> has this 125 * <code>identifier</code> 126 * @see #getColumn 127 */ getColumnIndex(Object columnIdentifier)128 public int getColumnIndex(Object columnIdentifier); 129 130 /** 131 * Returns the <code>TableColumn</code> object for the column at 132 * <code>columnIndex</code>. 133 * 134 * @param columnIndex the index of the desired column 135 * @return the <code>TableColumn</code> object for 136 * the column at <code>columnIndex</code> 137 */ getColumn(int columnIndex)138 public TableColumn getColumn(int columnIndex); 139 140 /** 141 * Returns the width between the cells in each column. 142 * @return the margin, in pixels, between the cells 143 */ getColumnMargin()144 public int getColumnMargin(); 145 146 /** 147 * Returns the index of the column that lies on the 148 * horizontal point, <code>xPosition</code>; 149 * or -1 if it lies outside the any of the column's bounds. 150 * 151 * In keeping with Swing's separable model architecture, a 152 * TableColumnModel does not know how the table columns actually appear on 153 * screen. The visual presentation of the columns is the responsibility 154 * of the view/controller object using this model (typically JTable). The 155 * view/controller need not display the columns sequentially from left to 156 * right. For example, columns could be displayed from right to left to 157 * accommodate a locale preference or some columns might be hidden at the 158 * request of the user. Because the model does not know how the columns 159 * are laid out on screen, the given <code>xPosition</code> should not be 160 * considered to be a coordinate in 2D graphics space. Instead, it should 161 * be considered to be a width from the start of the first column in the 162 * model. If the column index for a given X coordinate in 2D space is 163 * required, <code>JTable.columnAtPoint</code> can be used instead. 164 * 165 * @param xPosition width from the start of the first column in 166 * the model. 167 * 168 * @return the index of the column; or -1 if no column is found 169 * @see javax.swing.JTable#columnAtPoint 170 */ getColumnIndexAtX(int xPosition)171 public int getColumnIndexAtX(int xPosition); 172 173 /** 174 * Returns the total width of all the columns. 175 * @return the total computed width of all columns 176 */ getTotalColumnWidth()177 public int getTotalColumnWidth(); 178 179 // 180 // Selection 181 // 182 183 /** 184 * Sets whether the columns in this model may be selected. 185 * @param flag true if columns may be selected; otherwise false 186 * @see #getColumnSelectionAllowed 187 */ setColumnSelectionAllowed(boolean flag)188 public void setColumnSelectionAllowed(boolean flag); 189 190 /** 191 * Returns true if columns may be selected. 192 * @return true if columns may be selected 193 * @see #setColumnSelectionAllowed 194 */ getColumnSelectionAllowed()195 public boolean getColumnSelectionAllowed(); 196 197 /** 198 * Returns an array of indicies of all selected columns. 199 * @return an array of integers containing the indicies of all 200 * selected columns; or an empty array if nothing is selected 201 */ getSelectedColumns()202 public int[] getSelectedColumns(); 203 204 /** 205 * Returns the number of selected columns. 206 * 207 * @return the number of selected columns; or 0 if no columns are selected 208 */ getSelectedColumnCount()209 public int getSelectedColumnCount(); 210 211 /** 212 * Sets the selection model. 213 * 214 * @param newModel a <code>ListSelectionModel</code> object 215 * @see #getSelectionModel 216 */ setSelectionModel(ListSelectionModel newModel)217 public void setSelectionModel(ListSelectionModel newModel); 218 219 /** 220 * Returns the current selection model. 221 * 222 * @return a <code>ListSelectionModel</code> object 223 * @see #setSelectionModel 224 */ getSelectionModel()225 public ListSelectionModel getSelectionModel(); 226 227 // 228 // Listener 229 // 230 231 /** 232 * Adds a listener for table column model events. 233 * 234 * @param x a <code>TableColumnModelListener</code> object 235 */ addColumnModelListener(TableColumnModelListener x)236 public void addColumnModelListener(TableColumnModelListener x); 237 238 /** 239 * Removes a listener for table column model events. 240 * 241 * @param x a <code>TableColumnModelListener</code> object 242 */ removeColumnModelListener(TableColumnModelListener x)243 public void removeColumnModelListener(TableColumnModelListener x); 244 } 245