--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.desktop/share/classes/javax/swing/table/TableColumnModel.java Tue Sep 12 19:03:39 2017 +0200
@@ -0,0 +1,244 @@
+/*
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javax.swing.table;
+
+import java.util.Enumeration;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.*;
+import javax.swing.*;
+
+
+/**
+ * Defines the requirements for a table column model object suitable for
+ * use with <code>JTable</code>.
+ *
+ * @author Alan Chung
+ * @author Philip Milne
+ * @see DefaultTableColumnModel
+ */
+public interface TableColumnModel
+{
+//
+// Modifying the model
+//
+
+ /**
+ * Appends <code>aColumn</code> to the end of the
+ * <code>tableColumns</code> array.
+ * This method posts a <code>columnAdded</code>
+ * event to its listeners.
+ *
+ * @param aColumn the <code>TableColumn</code> to be added
+ * @see #removeColumn
+ */
+ public void addColumn(TableColumn aColumn);
+
+ /**
+ * Deletes the <code>TableColumn</code> <code>column</code> from the
+ * <code>tableColumns</code> array. This method will do nothing if
+ * <code>column</code> is not in the table's column list.
+ * This method posts a <code>columnRemoved</code>
+ * event to its listeners.
+ *
+ * @param column the <code>TableColumn</code> to be removed
+ * @see #addColumn
+ */
+ public void removeColumn(TableColumn column);
+
+ /**
+ * Moves the column and its header at <code>columnIndex</code> to
+ * <code>newIndex</code>. The old column at <code>columnIndex</code>
+ * will now be found at <code>newIndex</code>. The column that used
+ * to be at <code>newIndex</code> is shifted left or right
+ * to make room. This will not move any columns if
+ * <code>columnIndex</code> equals <code>newIndex</code>. This method
+ * posts a <code>columnMoved</code> event to its listeners.
+ *
+ * @param columnIndex the index of column to be moved
+ * @param newIndex index of the column's new location
+ * @exception IllegalArgumentException if <code>columnIndex</code> or
+ * <code>newIndex</code>
+ * are not in the valid range
+ */
+ public void moveColumn(int columnIndex, int newIndex);
+
+ /**
+ * Sets the <code>TableColumn</code>'s column margin to
+ * <code>newMargin</code>. This method posts
+ * a <code>columnMarginChanged</code> event to its listeners.
+ *
+ * @param newMargin the width, in pixels, of the new column margins
+ * @see #getColumnMargin
+ */
+ public void setColumnMargin(int newMargin);
+
+//
+// Querying the model
+//
+
+ /**
+ * Returns the number of columns in the model.
+ * @return the number of columns in the model
+ */
+ public int getColumnCount();
+
+ /**
+ * Returns an <code>Enumeration</code> of all the columns in the model.
+ * @return an <code>Enumeration</code> of all the columns in the model
+ */
+ public Enumeration<TableColumn> getColumns();
+
+ /**
+ * Returns the index of the first column in the table
+ * whose identifier is equal to <code>identifier</code>,
+ * when compared using <code>equals</code>.
+ *
+ * @param columnIdentifier the identifier object
+ * @return the index of the first table column
+ * whose identifier is equal to <code>identifier</code>
+ * @exception IllegalArgumentException if <code>identifier</code>
+ * is <code>null</code>, or no
+ * <code>TableColumn</code> has this
+ * <code>identifier</code>
+ * @see #getColumn
+ */
+ public int getColumnIndex(Object columnIdentifier);
+
+ /**
+ * Returns the <code>TableColumn</code> object for the column at
+ * <code>columnIndex</code>.
+ *
+ * @param columnIndex the index of the desired column
+ * @return the <code>TableColumn</code> object for
+ * the column at <code>columnIndex</code>
+ */
+ public TableColumn getColumn(int columnIndex);
+
+ /**
+ * Returns the width between the cells in each column.
+ * @return the margin, in pixels, between the cells
+ */
+ public int getColumnMargin();
+
+ /**
+ * Returns the index of the column that lies on the
+ * horizontal point, <code>xPosition</code>;
+ * or -1 if it lies outside the any of the column's bounds.
+ *
+ * In keeping with Swing's separable model architecture, a
+ * TableColumnModel does not know how the table columns actually appear on
+ * screen. The visual presentation of the columns is the responsibility
+ * of the view/controller object using this model (typically JTable). The
+ * view/controller need not display the columns sequentially from left to
+ * right. For example, columns could be displayed from right to left to
+ * accommodate a locale preference or some columns might be hidden at the
+ * request of the user. Because the model does not know how the columns
+ * are laid out on screen, the given <code>xPosition</code> should not be
+ * considered to be a coordinate in 2D graphics space. Instead, it should
+ * be considered to be a width from the start of the first column in the
+ * model. If the column index for a given X coordinate in 2D space is
+ * required, <code>JTable.columnAtPoint</code> can be used instead.
+ *
+ * @param xPosition width from the start of the first column in
+ * the model.
+ *
+ * @return the index of the column; or -1 if no column is found
+ * @see javax.swing.JTable#columnAtPoint
+ */
+ public int getColumnIndexAtX(int xPosition);
+
+ /**
+ * Returns the total width of all the columns.
+ * @return the total computed width of all columns
+ */
+ public int getTotalColumnWidth();
+
+//
+// Selection
+//
+
+ /**
+ * Sets whether the columns in this model may be selected.
+ * @param flag true if columns may be selected; otherwise false
+ * @see #getColumnSelectionAllowed
+ */
+ public void setColumnSelectionAllowed(boolean flag);
+
+ /**
+ * Returns true if columns may be selected.
+ * @return true if columns may be selected
+ * @see #setColumnSelectionAllowed
+ */
+ public boolean getColumnSelectionAllowed();
+
+ /**
+ * Returns an array of indicies of all selected columns.
+ * @return an array of integers containing the indicies of all
+ * selected columns; or an empty array if nothing is selected
+ */
+ public int[] getSelectedColumns();
+
+ /**
+ * Returns the number of selected columns.
+ *
+ * @return the number of selected columns; or 0 if no columns are selected
+ */
+ public int getSelectedColumnCount();
+
+ /**
+ * Sets the selection model.
+ *
+ * @param newModel a <code>ListSelectionModel</code> object
+ * @see #getSelectionModel
+ */
+ public void setSelectionModel(ListSelectionModel newModel);
+
+ /**
+ * Returns the current selection model.
+ *
+ * @return a <code>ListSelectionModel</code> object
+ * @see #setSelectionModel
+ */
+ public ListSelectionModel getSelectionModel();
+
+//
+// Listener
+//
+
+ /**
+ * Adds a listener for table column model events.
+ *
+ * @param x a <code>TableColumnModelListener</code> object
+ */
+ public void addColumnModelListener(TableColumnModelListener x);
+
+ /**
+ * Removes a listener for table column model events.
+ *
+ * @param x a <code>TableColumnModelListener</code> object
+ */
+ public void removeColumnModelListener(TableColumnModelListener x);
+}