|
JavaTM Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JTable
public class JTable
JTable
用来显示和编辑常规二维单元表。有关面向任务的文档和使用 JTable
的示例,请参阅 The Java Tutorial 中的 How to Use Tables 一节。
JTable
有很多用来自定义其呈现和编辑的工具,同时提供了这些功能的默认设置,从而可以轻松地设置简单表。例如,要设置一个 10 行 10 列的表:
TableModel dataModel = new AbstractTableModel() { public int getColumnCount() { return 10; } public int getRowCount() { return 10;} public Object getValueAt(int row, int col) { return new Integer(row*col); } }; JTable table = new JTable(dataModel); JScrollPane scrollpane = new JScrollPane(table);
注意,如果要在单独的视图中(在 JScrollPane
外)使用 JTable
并显示表标题,则可以使用 getTableHeader()
获取并单独显示它。
要启用行的排序和过滤,请使用 RowSorter
。可以通过以下两种方式之一设置一个行排序器。
RowSorter
。例如:table.setRowSorter(new TableRowSorter(model))
。
autoCreateRowSorter
属性设置为 true
,从而 JTable
可用于创建 RowSorter
。例如:setAutoCreateRowSorter(true)
。
设计使用 JTable
的应用程序时,务必要注意用来表示表数据的数据结构。DefaultTableModel
是一个模型实现,它使用一个 Vector
来存储所有单元格的值,该 Vector
由包含多个 Object
的 Vector
组成。除了将数据从应用程序复制到 DefaultTableModel
中之外,还可以用 TableModel
接口的方法来包装数据,这样可将数据直接传递到 JTable
,如上例所示。这通常可以提高应用程序的效率,因为模型可以自由选择最适合数据的内部表示形式。在决定使用 AbstractTableModel
还是使用 DefaultTableModel
方面有一个好的实践经验,即在创建子类时使用 AbstractTableModel
作为基类,在不需要创建子类时则使用 DefaultTableModel
。
源分布演示部分中的 "TableExample" 目录给出了许多 JTable
用法的完整示例,包括如何使用 JTable
来提供一个可编辑的数据视图(数据取自数据库),以及如何修改显示的列以使用指定的渲染器和编辑器。
JTable
使用专有的整数来引用它所显示的模型的行和列。JTable
采用表格的单元格范围,并在绘制时使用 getValueAt(int, int)
从模型中获取值。务必记住各种 JTable
方法所返回的列和行索引是就 JTable
(视图)而言的,不一定是模型所使用的那些索引。
默认情况下,在 JTable
中对列进行重新安排,这样在视图中列的出现顺序与模型中列的顺序不同。但这根本不影响模型的实现:当列重新排列时,JTable
在内部保持列的新顺序,并在查询模型前转换其列索引。
因此编写 TableModel
时,不必侦听列的重排事件,因为不管视图怎样,模型都将在其自己的坐标系统被查询。在示例部分中有一个排序算法的演示,此演示正是使用了此技术在另一个坐标系统中进行排序,其中更改了行顺序,没有更改列顺序。
类似地,使用 RowSorter
提供的排序和过滤功能时,底层 TableModel
不需要知道怎样进行排序,RowSorter
将处理它。对底层 TableModel
使用 JTable
的基于行的方法时,必须进行坐标转换。所有基于 JTable
行的方法都是就 RowSorter
而言的,不一定与底层 TableModel
的方法相同。例如,选择始终是就 JTable
而言的,因此使用 RowSorter
时,需要使用 convertRowIndexToView
或 convertRowIndexToModel
进行转换。以下代码显示了如何将 JTable
的坐标转换为底层模型的坐标:
int[] selection = table.getSelectedRows(); for (int i = 0; i < selection.length; i++) { selection[i] = table.convertRowIndexToModel(selection[i]); } // selection is now in terms of the underlying TableModel
默认情况下,如果启用排序,那么排序时 JTable
将保留基于模型的选择和可变行高度。例如,如果当前选择行 0(就底层模型而言),那么排序之后将选择行 0(就底层模型而言)。选择有可能看起来被更改了,但就底层模型而言它仍然保持不变。模型索引不再可见或者被移除时除外。例如,如果行 0 被过滤掉了,那么选择在排序后将为空。
J2SE 5 在 JTable
中添加了一些方法,为某些普通打印需求提供方便的访问。print()
是一个简单的新方法,它允许快速简单地向应用程序添加打印支持。此外,新的 getPrintable(javax.swing.JTable.PrintMode, java.text.MessageFormat, java.text.MessageFormat)
方法可用于更高级的打印需求。
对于所有的 JComponent
类,可以使用 InputMap
和 ActionMap
将 Action
对象与 KeyStroke
进行关联,并在指定的条件下执行动作。
警告:Swing 不是线程安全的。有关更多信息,请参阅 Swing's Threading Policy。
警告:此类的序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同 Swing 版本的应用程序之间进行 RMI(Remote Method Invocation,远程方法调用)。从 1.4 版本开始,已在 java.beans
包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder
。
DefaultTableModel
,
TableRowSorter
嵌套类摘要 | |
---|---|
protected class |
JTable.AccessibleJTable
此类实现对 JTable 类的可访问性支持。 |
static class |
JTable.DropLocation
TransferHandler.DropLocation 的一个子类,表示 JTable 的放置位置 (drop location)。 |
static class |
JTable.PrintMode
用于打印 JTable 的打印模式。 |
从类 javax.swing.JComponent 继承的嵌套类/接口 |
---|
JComponent.AccessibleJComponent |
从类 java.awt.Container 继承的嵌套类/接口 |
---|
Container.AccessibleAWTContainer |
从类 java.awt.Component 继承的嵌套类/接口 |
---|
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy |
字段摘要 | |
---|---|
static int |
AUTO_RESIZE_ALL_COLUMNS
在所有的调整大小操作中,按比例调整所有的列。 |
static int |
AUTO_RESIZE_LAST_COLUMN
在所有的调整大小操作中,只对最后一列进行调整。 |
static int |
AUTO_RESIZE_NEXT_COLUMN
在 UI 中调整了一个列时,对其下一列进行相反方向的调整。 |
static int |
AUTO_RESIZE_OFF
不自动调整列的宽度;使用滚动条。 |
static int |
AUTO_RESIZE_SUBSEQUENT_COLUMNS
在 UI 调整中,更改后续列以保持总宽度不变;此为默认行为。 |
protected boolean |
autoCreateColumnsFromModel
如果为 true,则表对 TableModel 进行查询以构建默认列集。 |
protected int |
autoResizeMode
确定表是否自动调整列的宽度以占用表的整个宽度,以及如何进行调整。 |
protected TableCellEditor |
cellEditor
活动单元格编辑器对象,它重写当前单元格占用的屏幕空间,并允许用户更改其内容。 |
protected boolean |
cellSelectionEnabled
从 Java 2 平台 v1.3 开始已过时。 |
protected TableColumnModel |
columnModel
表的 TableColumnModel 。 |
protected TableModel |
dataModel
表的 TableModel 。 |
protected Hashtable |
defaultEditorsByColumnClass
一个由对象组成的表,它显示并编辑单元格的内容,通过在 TableModel 接口的 getColumnClass 中所声明的类建立索引。 |
protected Hashtable |
defaultRenderersByColumnClass
一个由对象组成的表,它显示单元格的内容,通过在 TableModel 接口的 getColumnClass 中所声明的类建立索引。 |
protected int |
editingColumn
标识所编辑的单元格的列。 |
protected int |
editingRow
标识所编辑的单元格的行。 |
protected Component |
editorComp
在编辑时处理编辑的 Component 。 |
protected Color |
gridColor
网格的颜色。 |
protected Dimension |
preferredViewportSize
Scrollable 接口使用它来确定初始的可见区域。 |
protected int |
rowHeight
表中每一行的高度,以像素为单位。 |
protected int |
rowMargin
每行中单元格之间间距的高度,以像素为单位。 |
protected boolean |
rowSelectionAllowed
如果行选择在此表中是允许的,则返回 true。 |
protected Color |
selectionBackground
已选定单元格的背景色。 |
protected Color |
selectionForeground
已选定单元格的前景色。 |
protected ListSelectionModel |
selectionModel
表的 ListSelectionModel ,用来追踪行选择。 |
protected boolean |
showHorizontalLines
如果 showHorizontalLines 为 true,则表在单元格之间绘制水平行。 |
protected boolean |
showVerticalLines
如果 showVerticalLines 为 true,则表在单元格之间绘制垂直行。 |
protected JTableHeader |
tableHeader
表所使用的 TableHeader 。 |
从类 javax.swing.JComponent 继承的字段 |
---|
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW |
从类 java.awt.Component 继承的字段 |
---|
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT |
从接口 java.awt.image.ImageObserver 继承的字段 |
---|
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH |
构造方法摘要 | |
---|---|
JTable()
构造一个默认的 JTable ,使用默认的数据模型、默认的列模型和默认的选择模型对其进行初始化。 |
|
JTable(int numRows,
int numColumns)
使用 DefaultTableModel 构造具有 numRows 行和 numColumns 列个空单元格的 JTable 。 |
|
JTable(Object[][] rowData,
Object[] columnNames)
构造一个 JTable 来显示二维数组 rowData 中的值,其列名称为 columnNames 。 |
|
JTable(TableModel dm)
构造一个 JTable ,使用数据模型 dm 、默认的列模型和默认的选择模型对其进行初始化。 |
|
JTable(TableModel dm,
TableColumnModel cm)
构造一个 JTable ,使用数据模型 dm 、列模型 cm 和默认的选择模型对其进行初始化。 |
|
JTable(TableModel dm,
TableColumnModel cm,
ListSelectionModel sm)
构造一个 JTable ,使用数据模型 dm 、列模型 cm 和选择模型 sm 对其进行初始化。 |
|
JTable(Vector rowData,
Vector columnNames)
构造一个 JTable 来显示 Vector 所组成的 Vector rowData 中的值,其列名称为 columnNames 。 |
方法摘要 | |
---|---|
void |
addColumn(TableColumn aColumn)
将 aColumn 追加到此 JTable 的列模型所保持的列数组的尾部。 |
void |
addColumnSelectionInterval(int index0,
int index1)
将从 index0 到 index1 之间(包含两端)的列添加到当前选择中。 |
void |
addNotify()
调用 configureEnclosingScrollPane 方法。 |
void |
addRowSelectionInterval(int index0,
int index1)
将从 index0 到 index1 之间(包含两端)的行添加到当前选择中。 |
void |
changeSelection(int rowIndex,
int columnIndex,
boolean toggle,
boolean extend)
根据 toggle 和 extend 这两个标志的状态,更新表的选择模型。 |
void |
clearSelection()
取消选中所有已选定的行和列。 |
void |
columnAdded(TableColumnModelEvent e)
将列添加到表的列模型时调用。 |
int |
columnAtPoint(Point point)
返回 point 所在的列索引;如果结果不在 [0, getColumnCount() -1] 范围内,则返回 -1。 |
void |
columnMarginChanged(ChangeEvent e)
当列由于间距的更改而被移动时调用。 |
void |
columnMoved(TableColumnModelEvent e)
重新定位列时调用。 |
void |
columnRemoved(TableColumnModelEvent e)
从表的列模型中移除列时调用。 |
void |
columnSelectionChanged(ListSelectionEvent e)
TableColumnModel 的选择模型更改时调用。 |
protected void |
configureEnclosingScrollPane()
如果此 JTable 是一个封闭 JScrollPane 的 viewportView (通常情况如此),那么可通过安装表的 tableHeader 作为滚动窗格的 columnHeaderView 来配置此 ScrollPane 。 |
int |
convertColumnIndexToModel(int viewColumnIndex)
将视图中位于 viewColumnIndex 的列索引映射到表模型中的列索引。 |
int |
convertColumnIndexToView(int modelColumnIndex)
将表模型中位于 modelColumnIndex 的列索引映射到视图中的列索引。 |
int |
convertRowIndexToModel(int viewRowIndex)
将基于视图的行索引映射到底层 TableModel 。 |
int |
convertRowIndexToView(int modelRowIndex)
将基于 TableModel 的行索引映射到该视图。 |
protected TableColumnModel |
createDefaultColumnModel()
返回默认的列模型对象,它是一个 DefaultTableColumnModel 。 |
void |
createDefaultColumnsFromModel()
使用 TableModel 接口中定义的 getColumnCount 方法根据数据模型创建默认的表列。 |
protected TableModel |
createDefaultDataModel()
返回默认的表模型对象,它是一个 DefaultTableModel 。 |
protected void |
createDefaultEditors()
为 object、number 和 boolean 值创建默认的单元格编辑器。 |
protected void |
createDefaultRenderers()
为 object、number、double、date、boolean 和 icon 创建默认的单元格渲染器。 |
protected ListSelectionModel |
createDefaultSelectionModel()
返回默认的选择模型对象,它是一个 DefaultListSelectionModel 。 |
protected JTableHeader |
createDefaultTableHeader()
返回默认的表标题对象,它是一个 JTableHeader 。 |
static JScrollPane |
createScrollPaneForTable(JTable aTable)
已过时。 从 Swing version 1.0.2 开始,由 new JScrollPane(aTable) 取代。 |
void |
doLayout()
使此表布局其行和列。 |
boolean |
editCellAt(int row,
int column)
如果 row 和 column 位置的索引在有效范围内,并且这些索引处的单元格是可编辑的,则以编程方式启动该位置单元格的编辑。 |
boolean |
editCellAt(int row,
int column,
EventObject e)
如果 row 和 column 位置的索引在有效范围内,并且这些索引处的单元格是可编辑的,则以编程方式启动该位置单元格的编辑。 |
void |
editingCanceled(ChangeEvent e)
编辑取消时调用。 |
void |
editingStopped(ChangeEvent e)
编辑结束时调用。 |
AccessibleContext |
getAccessibleContext()
获取与此 JTable 关联的 AccessibleContext。 |
boolean |
getAutoCreateColumnsFromModel()
确定表是否要根据模型创建默认的列。 |
boolean |
getAutoCreateRowSorter()
如果每当模型更改时,都应该创建一个新 RowSorter 并作为该表的排序器安装,则返回 true ;否则,返回 false 。 |
int |
getAutoResizeMode()
返回表的自动调整模式。 |
TableCellEditor |
getCellEditor()
返回活动单元格编辑器;如果该表当前没有被编辑,则返回 null 。 |
TableCellEditor |
getCellEditor(int row,
int column)
返回适用于由 row 和 column 所指定单元格的编辑器。 |
Rectangle |
getCellRect(int row,
int column,
boolean includeSpacing)
返回位于 row 和 column 相交位置的单元格矩形。 |
TableCellRenderer |
getCellRenderer(int row,
int column)
返回适于由此行和列所指定单元格的渲染器。 |
boolean |
getCellSelectionEnabled()
如果同时启用了行选择模型和列选择模型,则返回 true。 |
TableColumn |
getColumn(Object identifier)
返回表中列的 TableColumn 对象,当使用 equals 进行比较时,表的标识符等于 identifier 。 |
Class<?> |
getColumnClass(int column)
返回出现在视图中 column 列位置处的列类型。 |
int |
getColumnCount()
返回列模型中的列数。 |
TableColumnModel |
getColumnModel()
返回包含此表所有列信息的 TableColumnModel 。 |
String |
getColumnName(int column)
返回出现在视图中 column 列位置处的列名称。 |
boolean |
getColumnSelectionAllowed()
如果可以选择列,则返回 true。 |
TableCellEditor |
getDefaultEditor(Class<?> columnClass)
尚未在 TableColumn 中设置编辑器时,返回要使用的编辑器。 |
TableCellRenderer |
getDefaultRenderer(Class<?> columnClass)
尚未在 TableColumn 中设置渲染器时,返回要使用的单元格渲染器。 |
boolean |
getDragEnabled()
返回是否启用自动拖动处理。 |
JTable.DropLocation |
getDropLocation()
返回对组件的 DnD 操作期间此组件应该可见地指示为放置位置的位置;如果当前没有显示任何位置,则返回 null 。 |
DropMode |
getDropMode()
返回此组件的放置模式。 |
int |
getEditingColumn()
返回包含当前被编辑的单元格的列索引。 |
int |
getEditingRow()
返回包含当前被编辑的单元格的行索引。 |
Component |
getEditorComponent()
返回处理编辑会话的组件。 |
boolean |
getFillsViewportHeight()
返回此表是否始终大到足以填充封闭视口的高度。 |
Color |
getGridColor()
返回用来绘制网格线的颜色。 |
Dimension |
getIntercellSpacing()
返回单元格之间的水平间距和垂直间距。 |
TableModel |
getModel()
返回提供此 JTable 所显示数据的 TableModel 。 |
Dimension |
getPreferredScrollableViewportSize()
返回此表视口的首选大小。 |
Printable |
getPrintable(JTable.PrintMode printMode,
MessageFormat headerFormat,
MessageFormat footerFormat)
返回打印此 JTable 中所使用的 Printable 。 |
int |
getRowCount()
返回 JTable 中可以显示的行数(给定无限空间)。 |
int |
getRowHeight()
返回表的行高,以像素为单位。 |
int |
getRowHeight(int row)
返回 row 中单元格的高度,以像素为单位。 |
int |
getRowMargin()
获取单元格之间的间距,以像素为单位。 |
boolean |
getRowSelectionAllowed()
如果可以选择行,则返回 true。 |
RowSorter<? extends TableModel> |
getRowSorter()
返回负责排序的对象。 |
int |
getScrollableBlockIncrement(Rectangle visibleRect,
int orientation,
int direction)
返回 visibleRect.height 或 visibleRect.width ,这取决于此表的方向。 |
boolean |
getScrollableTracksViewportHeight()
返回 false 指示表的高度不是由视口的高度决定的,除非 getFillsViewportHeight 为 true 并且该表的首选高度小于视口的高度。 |
boolean |
getScrollableTracksViewportWidth()
如果 autoResizeMode 设置为 AUTO_RESIZE_OFF ,则返回 false,这指示表的宽度不是由视口的宽度决定的。 |
int |
getScrollableUnitIncrement(Rectangle visibleRect,
int orientation,
int direction)
返回完全呈现出一个新行或新列(取决于方向)的滚动增量(以像素为单位)。 |
int |
getSelectedColumn()
返回第一个选定列的索引;如果没有选定的列,则返回 -1。 |
int |
getSelectedColumnCount()
返回选定列数。 |
int[] |
getSelectedColumns()
返回所有选定列的索引。 |
int |
getSelectedRow()
返回第一个选定行的索引;如果没有选定的行,则返回 -1。 |
int |
getSelectedRowCount()
返回选定行数。 |
int[] |
getSelectedRows()
返回所有选定行的索引。 |
Color |
getSelectionBackground()
返回选定单元格的背景色。 |
Color |
getSelectionForeground()
返回选定单元格的前景色。 |
ListSelectionModel |
getSelectionModel()
返回用来维持行选择状态的 ListSelectionModel 。 |
boolean |
getShowHorizontalLines()
如果表绘制单元格之间的水平线,则返回 true,否则返回 false。 |
boolean |
getShowVerticalLines()
如果表绘制单元格之间的垂直线,则返回 true,否则返回 false。 |
boolean |
getSurrendersFocusOnKeystroke()
如果在键击导致编辑器被激活时编辑器应该获得焦点,则返回 true |
JTableHeader |
getTableHeader()
返回此 JTable 所使用的 tableHeader 。 |
String |
getToolTipText(MouseEvent event)
重写 JComponent 的 getToolTipText 方法,从而允许使用渲染器的提示(如果设置了文本)。 |
TableUI |
getUI()
返回呈现此组件的 L&F 对象。 |
String |
getUIClassID()
返回用于构造呈现此组件时所用 L&F 类名称的后缀。 |
boolean |
getUpdateSelectionOnSort()
如果排序后应该更新选择,则返回 true。 |
Object |
getValueAt(int row,
int column)
返回 row 和 column 位置的单元格值。 |
protected void |
initializeLocalVars()
将表的属性初始化为其默认值。 |
boolean |
isCellEditable(int row,
int column)
如果 row 和 column 位置的单元格是可编辑的,则返回 true。 |
boolean |
isCellSelected(int row,
int column)
如果指定的索引位于行和列的有效范围内,并且位于该指定位置的单元格被选定,则返回 true。 |
boolean |
isColumnSelected(int column)
如果指定的索引位于列的有效范围内,并且位于该索引的列被选定,则返回 true。 |
boolean |
isEditing()
如果正在编辑单元格,则返回 true。 |
boolean |
isRowSelected(int row)
如果指定的索引位于行的有效范围内,并且位于该索引的行被选定,则返回 true。 |
void |
moveColumn(int column,
int targetColumn)
将视图中的 column 列移动到当前被 targetColumn 列所占用的位置。 |
protected String |
paramString()
返回此表的字符串表示形式。 |
Component |
prepareEditor(TableCellEditor editor,
int row,
int column)
通过查询 row 、column 处单元格值的数据模型和单元格选择状态来准备编辑器。 |
Component |
prepareRenderer(TableCellRenderer renderer,
int row,
int column)
通过查询 row 、column 处单元格值的数据模型和单元格选择状态来准备渲染器。 |
boolean |
print()
一个便捷的方法,它显示一个打印对话框,然后以 PrintMode.FIT_WIDTH 模式打印此 JTable ,不打印标题或脚注文本。 |
boolean |
print(JTable.PrintMode printMode)
一个便捷的方法,它显示一个打印对话框,然后以给定的打印模式打印此 JTable ,不打印标题或脚注文本。 |
boolean |
print(JTable.PrintMode printMode,
MessageFormat headerFormat,
MessageFormat footerFormat)
一个便捷的方法,它显示一个打印对话框,然后以给定的打印模式打印此 JTable ,打印指定的标题和脚注文本。 |
boolean |
print(JTable.PrintMode printMode,
MessageFormat headerFormat,
MessageFormat footerFormat,
boolean showPrintDialog,
PrintRequestAttributeSet attr,
boolean interactive)
根据完全功能 print 方法的指定打印此表,将默认打印机指定为打印服务。 |
boolean |
print(JTable.PrintMode printMode,
MessageFormat headerFormat,
MessageFormat footerFormat,
boolean showPrintDialog,
PrintRequestAttributeSet attr,
boolean interactive,
PrintService service)
打印此 JTable 。 |
protected boolean |
processKeyBinding(KeyStroke ks,
KeyEvent e,
int condition,
boolean pressed)
由于发生 KeyEvent e 而调用此方法处理 ks 的键绑定。 |
void |
removeColumn(TableColumn aColumn)
从此 JTable 的列数组中移除 aColumn 。 |
void |
removeColumnSelectionInterval(int index0,
int index1)
取消选中从 index0 到 index1 之间(包含两端)的列。 |
void |
removeEditor()
丢弃编辑器对象并释放它用于单元格呈现的资源。 |
void |
removeNotify()
调用 unconfigureEnclosingScrollPane 方法。 |
void |
removeRowSelectionInterval(int index0,
int index1)
取消选中从 index0 到 index1 之间(包含两端)的行。 |
protected void |
resizeAndRepaint()
等效于先调用 revalidate 再调用 repaint 。 |
int |
rowAtPoint(Point point)
返回 point 所在的行索引;如果结果不在 [0, getRowCount() -1] 范围内,则返回 -1。 |
void |
selectAll()
选择表中的所有行、列和单元格。 |
void |
setAutoCreateColumnsFromModel(boolean autoCreateColumnsFromModel)
设置此表的 autoCreateColumnsFromModel 标志。 |
void |
setAutoCreateRowSorter(boolean autoCreateRowSorter)
指定其模型更改时是否应该为表创建一个 RowSorter 。 |
void |
setAutoResizeMode(int mode)
当调整表的大小时,设置表的自动调整模式。 |
void |
setCellEditor(TableCellEditor anEditor)
设置活动单元格编辑器。 |
void |
setCellSelectionEnabled(boolean cellSelectionEnabled)
设置此表是否允许同时存在行选择和列选择。 |
void |
setColumnModel(TableColumnModel columnModel)
将此表的列模型设置为 newModel ,并向其注册以获取来自新数据模型的侦听器通知。 |
void |
setColumnSelectionAllowed(boolean columnSelectionAllowed)
设置是否可以选择此模型中的列。 |
void |
setColumnSelectionInterval(int index0,
int index1)
选择从 index0 到 index1 之间(包含两端)的列。 |
void |
setDefaultEditor(Class<?> columnClass,
TableCellEditor editor)
如果尚未在 TableColumn 中设置编辑器,则设置要使用的默认单元格编辑器。 |
void |
setDefaultRenderer(Class<?> columnClass,
TableCellRenderer renderer)
如果没有在 TableColumn 中设置渲染器,则设置要使用的默认单元格渲染器。 |
void |
setDragEnabled(boolean b)
打开或关闭自动拖动处理。 |
void |
setDropMode(DropMode dropMode)
设置此组件的放置模式。 |
void |
setEditingColumn(int aColumn)
设置 editingColumn 变量。 |
void |
setEditingRow(int aRow)
设置 editingRow 变量。 |
void |
setFillsViewportHeight(boolean fillsViewportHeight)
设置此表是否始终大到足以填充封闭视口的高度。 |
void |
setGridColor(Color gridColor)
将用来绘制网格线的颜色设置为 gridColor 并重新显示它。 |
void |
setIntercellSpacing(Dimension intercellSpacing)
将 rowMargin 和 columnMargin (单元格之间间距的高度和宽度)设置为 intercellSpacing 。 |
void |
setModel(TableModel dataModel)
将此表的数据模型设置为 newModel ,并向其注册以获取来自新数据模型的侦听器通知。 |
void |
setPreferredScrollableViewportSize(Dimension size)
设置此表视口的首选大小。 |
void |
setRowHeight(int rowHeight)
将所有单元格的高度设置为 rowHeight (以像素为单位),重新验证并重新绘制它。 |
void |
setRowHeight(int row,
int rowHeight)
将 row 的高度设置为 rowHeight ,重新验证并重新绘制它。 |
void |
setRowMargin(int rowMargin)
设置相临行中单元格之间的间距。 |
void |
setRowSelectionAllowed(boolean rowSelectionAllowed)
设置是否可以选择此模型中的行。 |
void |
setRowSelectionInterval(int index0,
int index1)
选择从 index0 到 index1 之间(包含两端)的行。 |
void |
setRowSorter(RowSorter<? extends TableModel> sorter)
设置 RowSorter 。 |
void |
setSelectionBackground(Color selectionBackground)
设置选定单元格的背景色。 |
void |
setSelectionForeground(Color selectionForeground)
设置选定单元格的前景色。 |
void |
setSelectionMode(int selectionMode)
将表的选择模式设置为只允许单个选择、单个连续间隔选择或多间隔选择。 |
void |
setSelectionModel(ListSelectionModel newModel)
将此表的行选择模型设置为 newModel ,并向其注册以获取来自新数据模型的侦听器通知。 |
void |
setShowGrid(boolean showGrid)
设置表是否绘制单元格周围的网格线。 |
void |
setShowHorizontalLines(boolean showHorizontalLines)
设置表是否绘制单元格之间的水平线。 |
void |
setShowVerticalLines(boolean showVerticalLines)
设置表是否绘制单元格之间的垂直线。 |
void |
setSurrendersFocusOnKeystroke(boolean surrendersFocusOnKeystroke)
设置由于 JTable 为某个单元格转发键盘事件而导致编辑器被激活时,此 JTable 中的编辑器是否获得键盘焦点。 |
void |
setTableHeader(JTableHeader tableHeader)
将此 JTable 所使用的 tableHeader 设置为 newHeader 。 |
void |
setUI(TableUI ui)
设置呈现此组件并进行重新绘制的 L&F 对象。 |
void |
setUpdateSelectionOnSort(boolean update)
指定排序后是否应该更新选择。 |
void |
setValueAt(Object aValue,
int row,
int column)
设置表模型中 row 和 column 位置的单元格值。 |
void |
sizeColumnsToFit(boolean lastColumnOnly)
已过时。 从 Swing version 1.0.3 开始,由 doLayout() 取代。 |
void |
sizeColumnsToFit(int resizingColumn)
从 Java 2 平台 v1.4 开始已过时。 |
void |
sorterChanged(RowSorterEvent e)
RowSorter 以某种方式发生了更改的 RowSorterListener 通知。 |
void |
tableChanged(TableModelEvent e)
当此表的 TableModel 生成 TableModelEvent 时调用。 |
protected void |
unconfigureEnclosingScrollPane()
通过将封闭滚动窗格的 columnHeaderView 替换为 null ,可以起到 configureEnclosingScrollPane 的相反作用。 |
void |
updateUI()
UIManager 发出的表明 L&F 已经更改的通知。 |
void |
valueChanged(ListSelectionEvent e)
行选择更改时调用,重新绘制来显示新的选择。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
public static final int AUTO_RESIZE_OFF
public static final int AUTO_RESIZE_NEXT_COLUMN
public static final int AUTO_RESIZE_SUBSEQUENT_COLUMNS
public static final int AUTO_RESIZE_LAST_COLUMN
public static final int AUTO_RESIZE_ALL_COLUMNS
protected TableModel dataModel
TableModel
。
protected TableColumnModel columnModel
TableColumnModel
。
protected ListSelectionModel selectionModel
ListSelectionModel
,用来追踪行选择。
protected JTableHeader tableHeader
TableHeader
。
protected int rowHeight
protected int rowMargin
protected Color gridColor
protected boolean showHorizontalLines
showHorizontalLines
为 true,则表在单元格之间绘制水平行。
protected boolean showVerticalLines
showVerticalLines
为 true,则表在单元格之间绘制垂直行。
protected int autoResizeMode
protected boolean autoCreateColumnsFromModel
TableModel
进行查询以构建默认列集。
protected Dimension preferredViewportSize
Scrollable
接口使用它来确定初始的可见区域。
protected boolean rowSelectionAllowed
protected boolean cellSelectionEnabled
rowSelectionAllowed
属性和 columnModel
的 columnSelectionAllowed
属性,或者使用方法 getCellSelectionEnabled
。
protected transient Component editorComp
Component
。
protected transient TableCellEditor cellEditor
null
。
protected transient int editingColumn
protected transient int editingRow
protected transient Hashtable defaultRenderersByColumnClass
TableModel
接口的 getColumnClass
中所声明的类建立索引。
protected transient Hashtable defaultEditorsByColumnClass
TableModel
接口的 getColumnClass
中所声明的类建立索引。
protected Color selectionForeground
protected Color selectionBackground
构造方法详细信息 |
---|
public JTable()
JTable
,使用默认的数据模型、默认的列模型和默认的选择模型对其进行初始化。
createDefaultDataModel()
,
createDefaultColumnModel()
,
createDefaultSelectionModel()
public JTable(TableModel dm)
JTable
,使用数据模型 dm
、默认的列模型和默认的选择模型对其进行初始化。
dm
- 表的数据模型createDefaultColumnModel()
,
createDefaultSelectionModel()
public JTable(TableModel dm, TableColumnModel cm)
JTable
,使用数据模型 dm
、列模型 cm
和默认的选择模型对其进行初始化。
dm
- 表的数据模型cm
- 表的列模型createDefaultSelectionModel()
public JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm)
JTable
,使用数据模型 dm
、列模型 cm
和选择模型 sm
对其进行初始化。如果任何参数为 null
,则此方法将使用相应的默认模型初始化表。如果 cm
为非 null,则 autoCreateColumnsFromModel
标志被设置为 false,否则设置为 true,并使用 dm
中各列的合适 TableColumn
来填充列模型。
dm
- 表的数据模型cm
- 表的列模型sm
- 表的行选择模型createDefaultDataModel()
,
createDefaultColumnModel()
,
createDefaultSelectionModel()
public JTable(int numRows, int numColumns)
DefaultTableModel
构造具有 numRows
行和 numColumns
列个空单元格的 JTable
。列名称采用 "A"、"B"、"C" 等形式。
numRows
- 表所拥有的行数numColumns
- 表所拥有的列数DefaultTableModel
public JTable(Vector rowData, Vector columnNames)
JTable
来显示 Vector
所组成的 Vector
rowData
中的值,其列名称为 columnNames
。rowData
中包含的 Vector
应该包含该行的值。换句话说,可以通过以下代码获取第 1 行,第 5 列单元格的值:
((Vector)rowData.elementAt(1)).elementAt(5);
rowData
- 新表的数据columnNames
- 每列的名称public JTable(Object[][] rowData, Object[] columnNames)
JTable
来显示二维数组 rowData
中的值,其列名称为 columnNames
。rowData
是一个行数组,因此可以通过以下代码获取第 1 行,第 5 列单元格的值:
rowData[1][5];
所有行的长度必须与 columnNames
的长度相同。
rowData
- 新表的数据columnNames
- 每列的名称方法详细信息 |
---|
public void addNotify()
configureEnclosingScrollPane
方法。
JComponent
中的 addNotify
configureEnclosingScrollPane()
protected void configureEnclosingScrollPane()
JTable
是一个封闭 JScrollPane
的 viewportView
(通常情况如此),那么可通过安装表的 tableHeader
作为滚动窗格的 columnHeaderView
来配置此 ScrollPane
。以正常方式向 JScrollPane
添加 JTable
时,请使用 new JScrollPane(myTable)
,addNotify
是在 JTable
中调用的(表被添加到视口中时)。JTable
的 addNotify
方法将调用此方法,此方法是受保护的,以便子类可以重写此默认的安装过程。
addNotify()
public void removeNotify()
unconfigureEnclosingScrollPane
方法。
JComponent
中的 removeNotify
unconfigureEnclosingScrollPane()
protected void unconfigureEnclosingScrollPane()
columnHeaderView
替换为 null
,可以起到 configureEnclosingScrollPane
的相反作用。JTable
的 removeNotify
方法调用此方法,此方法是受保护的,以便子类可以重写此默认的卸载过程。
removeNotify()
,
configureEnclosingScrollPane()
@Deprecated public static JScrollPane createScrollPaneForTable(JTable aTable)
new JScrollPane(aTable)
取代。
new JScrollPane(aTable)
。
public void setTableHeader(JTableHeader tableHeader)
JTable
所使用的 tableHeader
设置为 newHeader
。tableHeader
为 null
是合法的。
tableHeader
- 新的 tableHeadergetTableHeader()
public JTableHeader getTableHeader()
JTable
所使用的 tableHeader
。
tableHeader
setTableHeader(javax.swing.table.JTableHeader)
public void setRowHeight(int rowHeight)
rowHeight
(以像素为单位),重新验证并重新绘制它。单元格的高度等于行高减去行间距。
rowHeight
- 新的行高
IllegalArgumentException
- 如果 rowHeight
小于 1getRowHeight()
public int getRowHeight()
setRowHeight(int)
public void setRowHeight(int row, int rowHeight)
row
的高度设置为 rowHeight
,重新验证并重新绘制它。此行中单元格的高度等于行高减去行间距。
row
- 更改高度的行rowHeight
- 新的行高,以像素为单位
IllegalArgumentException
- 如果 rowHeight
小于 1public int getRowHeight(int row)
row
中单元格的高度,以像素为单位。
row
- 要返回其高度的行
public void setRowMargin(int rowMargin)
rowMargin
- 一行中单元格之间的像素数getRowMargin()
public int getRowMargin()
getIntercellSpacing().height
。
setRowMargin(int)
public void setIntercellSpacing(Dimension intercellSpacing)
rowMargin
和 columnMargin
(单元格之间间距的高度和宽度)设置为 intercellSpacing
。
intercellSpacing
- 指定单元格之间新高度和宽度的 Dimension
getIntercellSpacing()
public Dimension getIntercellSpacing()
setIntercellSpacing(java.awt.Dimension)
public void setGridColor(Color gridColor)
gridColor
并重新显示它。默认的颜色取决于外观。
gridColor
- 网格线的新颜色
IllegalArgumentException
- 如果 gridColor
为 null
getGridColor()
public Color getGridColor()
setGridColor(java.awt.Color)
public void setShowGrid(boolean showGrid)
showGrid
为 true,则绘制网格线;如果为 false,则不绘制。没有 getShowGrid
方法,因为此状态保存在两个变量中,即 showHorizontalLines
和 showVerticalLines
,可以对其中任何一个变量单独进行查询。
showGrid
- 如果表视图应该绘制网格线,则为 truesetShowVerticalLines(boolean)
,
setShowHorizontalLines(boolean)
public void setShowHorizontalLines(boolean showHorizontalLines)
showHorizontalLines
为 true,则绘制水平线;如果为 false,则不绘制。
showHorizontalLines
- 如果表视图应该绘制水平线,则为 truegetShowHorizontalLines()
,
setShowGrid(boolean)
,
setShowVerticalLines(boolean)
public void setShowVerticalLines(boolean showVerticalLines)
showVerticalLines
为 true,则绘制垂直线;如果为 false,则不绘制。
showVerticalLines
- 如果表视图应该绘制垂直线,则为 truegetShowVerticalLines()
,
setShowGrid(boolean)
,
setShowHorizontalLines(boolean)
public boolean getShowHorizontalLines()
setShowHorizontalLines(boolean)
public boolean getShowVerticalLines()
setShowVerticalLines(boolean)
public void setAutoResizeMode(int mode)
mode
- 5 个合法值之一:AUTO_RESIZE_OFF、AUTO_RESIZE_NEXT_COLUMN、AUTO_RESIZE_SUBSEQUENT_COLUMNS、AUTO_RESIZE_LAST_COLUMN、AUTO_RESIZE_ALL_COLUMNSgetAutoResizeMode()
,
doLayout()
public int getAutoResizeMode()
setAutoResizeMode(int)
,
doLayout()
public void setAutoCreateColumnsFromModel(boolean autoCreateColumnsFromModel)
autoCreateColumnsFromModel
标志。如果 autoCreateColumnsFromModel
由 false 更改为 true,则此方法调用 createDefaultColumnsFromModel
。
autoCreateColumnsFromModel
- 如果 JTable
应该自动创建列,则为 truegetAutoCreateColumnsFromModel()
,
createDefaultColumnsFromModel()
public boolean getAutoCreateColumnsFromModel()
setModel
将清除所有现有列并根据新模型创建新的列。同样,如果 tableChanged
通知中的事件指定整个表已更改,则将重新构建各列。默认值为 true。
setAutoCreateColumnsFromModel(boolean)
,
createDefaultColumnsFromModel()
public void createDefaultColumnsFromModel()
TableModel
接口中定义的 getColumnCount
方法根据数据模型创建默认的表列。
在根据模型的信息创建新的列之前,清除所有现有列。
getAutoCreateColumnsFromModel()
public void setDefaultRenderer(Class<?> columnClass, TableCellRenderer renderer)
TableColumn
中设置渲染器,则设置要使用的默认单元格渲染器。如果 renderer 为 null
,则移除此 columnClass 的默认渲染器。
columnClass
- 设置此 columnClass 的默认单元格渲染器renderer
- 此 columnClass 要使用的默认单元格渲染器getDefaultRenderer(java.lang.Class>)
,
setDefaultEditor(java.lang.Class>, javax.swing.table.TableCellEditor)
public TableCellRenderer getDefaultRenderer(Class<?> columnClass)
TableColumn
中设置渲染器时,返回要使用的单元格渲染器。呈现单元格时,渲染器是根据列中各单元格的类从各个项的 Hashtable
中获取的。如果没有对应于此 columnClass
的项,则此方法返回最相关超类的项。JTable
安装了对应于 Object
、Number
和 Boolean
的项,它们都可以修改和替换。
columnClass
- 返回此 columnClass 的默认单元格渲染器
setDefaultRenderer(java.lang.Class>, javax.swing.table.TableCellRenderer)
,
getColumnClass(int)
public void setDefaultEditor(Class<?> columnClass, TableCellEditor editor)
TableColumn
中设置编辑器,则设置要使用的默认单元格编辑器。如果表不需要进行编辑,或者表中的特定列不需要编辑,则使用 TableModel
接口中的 isCellEditable
方法来确保此 JTable
在这些列中不启动编辑器。如果 editor 为 null
,则移除此 columnClass 的默认编辑器。
columnClass
- 设置此 columnClass 的默认单元格编辑器editor
- 此 columnClass 要使用的默认单元格编辑器TableModel.isCellEditable(int, int)
,
getDefaultEditor(java.lang.Class>)
,
setDefaultRenderer(java.lang.Class>, javax.swing.table.TableCellRenderer)
public TableCellEditor getDefaultEditor(Class<?> columnClass)
TableColumn
中设置编辑器时,返回要使用的编辑器。编辑单元格时,编辑器是根据列中各单元格的类从各项的 Hashtable
中获取的。如果没有对应于此 columnClass
的项,则此方法返回最相关超类的项。JTable
安装了对应于 Object
、Number
和 Boolean
的项,它们都可以修改和替换。
columnClass
- 返回此 columnClass 的默认单元格编辑器
setDefaultEditor(java.lang.Class>, javax.swing.table.TableCellEditor)
,
getColumnClass(int)
public void setDragEnabled(boolean b)
true
,并且该表的 TransferHandler
需要为非 null
。dragEnabled
属性的默认值为 false
。
遵守此属性并识别用户拖动动作的作业取决于外观实现,尤其是表的 TableUI
。当启用自动拖动处理时,只要用户在项(单个选择模式中)或选择(其他选择模式中)上按下鼠标按键,并将鼠标移动几个像素,多数外观(包括子类化 BasicLookAndFeel
的外观)就会开始拖放操作。因此,将此属性设置为 true
可以对选择行为产生微妙的影响。
如果使用一个忽略此属性的外观,仍然可以通过在表的 TransferHandler
上调用 exportAsDrag
开始拖放操作。
b
- 是否启用自动拖动处理
HeadlessException
- 如果 b
为 true
,并且 GraphicsEnvironment.isHeadless()
返回 true
GraphicsEnvironment.isHeadless()
,
getDragEnabled()
,
JComponent.setTransferHandler(javax.swing.TransferHandler)
,
TransferHandler
public boolean getDragEnabled()
dragEnabled
属性的值setDragEnabled(boolean)
public final void setDropMode(DropMode dropMode)
DropMode.USE_SELECTION
。 但是,为了用户使用更加方便,建议使用其他某个模式。例如,DropMode.ON
提供与选择类似的显示项的行为,但执行此操作不会影响表中的实际选择。
JTable
支持以下放置模式:
DropMode.USE_SELECTION
DropMode.ON
DropMode.INSERT
DropMode.INSERT_ROWS
DropMode.INSERT_COLS
DropMode.ON_OR_INSERT
DropMode.ON_OR_INSERT_ROWS
DropMode.ON_OR_INSERT_COLS
只有此组件具有接受放置操作的 TransferHandler
时,放置模式才有意义。
dropMode
- 要使用的放置模式
IllegalArgumentException
- 如果放置模式不受支持或为 null
getDropMode()
,
getDropLocation()
,
JComponent.setTransferHandler(javax.swing.TransferHandler)
,
TransferHandler
public final DropMode getDropMode()
setDropMode(javax.swing.DropMode)
public final JTable.DropLocation getDropLocation()
null
。
此方法不用于从 TransferHandler
查询放置操作,因为放置操作只在 TransferHandler
的 canImport
已经返回并允许显示该位置之后才会被设置。
当此属性更改时,组件将触发名为 "dropLocation" 的属性更改事件。
setDropMode(javax.swing.DropMode)
,
TransferHandler.canImport(TransferHandler.TransferSupport)
public void setAutoCreateRowSorter(boolean autoCreateRowSorter)
RowSorter
。
当调用 setAutoCreateRowSorter(true)
时,立即创建一个 TableRowSorter
并安装在表上。autoCreateRowSorter
属性保持为 true
时,每次模型更改都会创建一个新的 TableRowSorter
并将其设置为表的行排序器。
autoCreateRowSorter
- 是否应该自动创建 RowSorter
TableRowSorter
public boolean getAutoCreateRowSorter()
RowSorter
并作为该表的排序器安装,则返回 true
;否则,返回 false
。
RowSorter
,则返回 truepublic void setUpdateSelectionOnSort(boolean update)
update
- 在排序时是否应该更新选择public boolean getUpdateSelectionOnSort()
public void setRowSorter(RowSorter<? extends TableModel> sorter)
RowSorter
。RowSorter
用于提供对 JTable
的排序和过滤。
此方法清除该选择并重置所有可变行高度。
如果 RowSorter
的底层模型不同于此 JTable
的底层模型,则将导致不确定的行为。
sorter
- RowSorter
;null
表示关闭排序TableRowSorter
public RowSorter<? extends TableModel> getRowSorter()
public void setSelectionMode(int selectionMode)
JTable
提供用于处理行选择和列选择的所有方法。设置状态时(例如 setSelectionMode
),它不仅更新行选择模型的模式,而且还将设置 columnModel
选择模型中的类似值。如果希望在不同的模式中操作行选择模型和列选择模型,请直接设置这二者。
JTable
的行选择模型和列选择模型都默认使用 DefaultListSelectionModel
,以便 JTable
与 JList
的工作方式一致。有关各种模式的详细信息,请参阅 JList
中的 setSelectionMode
方法。
JList.setSelectionMode(int)
public void setRowSelectionAllowed(boolean rowSelectionAllowed)
rowSelectionAllowed
- 如果此模型允许行选择,则为 truegetRowSelectionAllowed()
public boolean getRowSelectionAllowed()
setRowSelectionAllowed(boolean)
public void setColumnSelectionAllowed(boolean columnSelectionAllowed)
columnSelectionAllowed
- 如果此模型允许列选择,则为 truegetColumnSelectionAllowed()
public boolean getColumnSelectionAllowed()
setColumnSelectionAllowed(boolean)
public void setCellSelectionEnabled(boolean cellSelectionEnabled)
isCellSelected
以更改此默认行为。此方法等效于将 columnModel
的 rowSelectionAllowed
属性和 columnSelectionAllowed
属性均设置为所提供的值。
cellSelectionEnabled
- 如果允许同时存在行选择和列选择,则为 truegetCellSelectionEnabled()
,
isCellSelected(int, int)
public boolean getCellSelectionEnabled()
getRowSelectionAllowed() && getColumnSelectionAllowed()
。
setCellSelectionEnabled(boolean)
public void selectAll()
public void clearSelection()
public void setRowSelectionInterval(int index0, int index1)
index0
到 index1
之间(包含两端)的行。
index0
- 间隔的一端index1
- 间隔的另一端
IllegalArgumentException
- 如果 index0
或 index1
位于 [0,getRowCount()
-1] 范围外public void setColumnSelectionInterval(int index0, int index1)
index0
到 index1
之间(包含两端)的列。
index0
- 间隔的一端index1
- 间隔的另一端
IllegalArgumentException
- 如果 index0
或 index1
位于 [0, getColumnCount()
-1] 范围外public void addRowSelectionInterval(int index0, int index1)
index0
到 index1
之间(包含两端)的行添加到当前选择中。
index0
- 间隔的一端index1
- 间隔的另一端
IllegalArgumentException
- 如果 index0
或 index1
位于 [0, getRowCount()
-1] 范围外public void addColumnSelectionInterval(int index0, int index1)
index0
到 index1
之间(包含两端)的列添加到当前选择中。
index0
- 间隔的一端index1
- 间隔的另一端
IllegalArgumentException
- 如果 index0
或 index1
位于 [0, getColumnCount()
-1] 范围外public void removeRowSelectionInterval(int index0, int index1)
index0
到 index1
之间(包含两端)的行。
index0
- 间隔的一端index1
- 间隔的另一端
IllegalArgumentException
- 如果 index0
或 index1
位于 [0, getRowCount()
-1] 范围外public void removeColumnSelectionInterval(int index0, int index1)
index0
到 index1
之间(包含两端)的列。
index0
- 间隔的一端index1
- 间隔的另一端
IllegalArgumentException
- 如果 index0
或 index1
位于 [0, getColumnCount()
-1] 范围外public int getSelectedRow()
public int getSelectedColumn()
public int[] getSelectedRows()
getSelectedRow()
public int[] getSelectedColumns()
getSelectedColumn()
public int getSelectedRowCount()
public int getSelectedColumnCount()
public boolean isRowSelected(int row)
row
是有效的索引,并且位于该索引的行被选定(其中 0 表示第一行),则返回 truepublic boolean isColumnSelected(int column)
column
- 列模型中的列
column
是有效的索引,并且位于该索引的列被选定(其中 0 表示第一列),则返回 truepublic boolean isCellSelected(int row, int column)
row
- 被查询的行column
- 被查询的列
row
和 column
是有效的索引,并且位于索引 (row, column)
的单元格被选定(其中第一行和第一列位于索引 0),则返回 truepublic void changeSelection(int rowIndex, int columnIndex, boolean toggle, boolean extend)
toggle
和 extend
这两个标志的状态,更新表的选择模型。UI 所接收的键盘事件或鼠标事件所引起的大多数选择更改都是通过此方法来传递的,以便子类可以重写此行为。某些 UI 需要的功能可能多于此方法所提供的功能(例如在操作非连续选择的前端时),而且对某些选择更改可能不会调用到此方法中。
此实现使用以下约定:
toggle
:false,extend
:false。清除以前的选择并确保选定新的单元格。
toggle
:false,extend
:true。将以前的选择从定位点扩展到指定的单元格,清除所有其他选择。
toggle
:true,extend
:false。如果指定的单元格是选定的,则取消选定它。如果它不是选定的,则选定它。
toggle
:true,extend
:true。将定位点的选择状态应用于它与指定单元间的所有单元。
rowIndex
- 影响 row
的选择columnIndex
- 影响 column
的选择toggle
- 参见上面的描述extend
- 如果为 true,则扩展当前的选择public Color getSelectionForeground()
Color
对象setSelectionForeground(java.awt.Color)
,
setSelectionBackground(java.awt.Color)
public void setSelectionForeground(Color selectionForeground)
此属性的默认值由外观实现定义。
这是一个 JavaBeans 绑定 (bound) 属性。
selectionForeground
- 用于选定列表项前景中的 Color
getSelectionForeground()
,
setSelectionBackground(java.awt.Color)
,
JComponent.setForeground(java.awt.Color)
,
JComponent.setBackground(java.awt.Color)
,
JComponent.setFont(java.awt.Font)
public Color getSelectionBackground()
Color
setSelectionBackground(java.awt.Color)
,
setSelectionForeground(java.awt.Color)
public void setSelectionBackground(Color selectionBackground)
此属性的默认值由外观实现定义。
这是一个 JavaBeans 绑定属性。
selectionBackground
- 用于选定单元格背景的 Color
getSelectionBackground()
,
setSelectionForeground(java.awt.Color)
,
JComponent.setForeground(java.awt.Color)
,
JComponent.setBackground(java.awt.Color)
,
JComponent.setFont(java.awt.Font)
public TableColumn getColumn(Object identifier)
TableColumn
对象,当使用 equals
进行比较时,表的标识符等于 identifier
。
identifier
- 标识符对象
TableColumn
对象
IllegalArgumentException
- 如果 identifier
为 null
或者没有 TableColumn
具有此标识符public int convertColumnIndexToModel(int viewColumnIndex)
viewColumnIndex
的列索引映射到表模型中的列索引。返回模型中的对应列索引。如果 viewColumnIndex
小于 0,则返回 viewColumnIndex
。
viewColumnIndex
- 视图中的列索引
convertColumnIndexToView(int)
public int convertColumnIndexToView(int modelColumnIndex)
modelColumnIndex
的列索引映射到视图中的列索引。返回视图中的对应列索引;如果此列不是被显示的列,则返回 -1。如果 modelColumnIndex
小于 0,则返回 modelColumnIndex
。
modelColumnIndex
- 模型中的列索引
convertColumnIndexToModel(int)
public int convertRowIndexToView(int modelRowIndex)
TableModel
的行索引映射到该视图。如果模型的内容没有进行排序,则模型和视图的索引相同。
modelRowIndex
- 基于模型的行索引
IndexOutOfBoundsException
- 如果启用排序并传递 TableModel
的行数范围之外的索引TableRowSorter
public int convertRowIndexToModel(int viewRowIndex)
TableModel
。如果模型的内容没有进行排序,则模型和视图的索引相同。
viewRowIndex
- 视图中行的索引
IndexOutOfBoundsException
- 如果启用排序并传递 JTable
范围(由 getRowCount
方法确定)之外的索引TableRowSorter
,
getRowCount()
public int getRowCount()
JTable
中可以显示的行数(给定无限空间)。如果已指定一个带有过滤器的 RowSorter
,则返回的行数可能与底层 TableModel
的行数不同。
JTable
中显示的行数getColumnCount()
public int getColumnCount()
getRowCount()
,
removeColumn(javax.swing.table.TableColumn)
public String getColumnName(int column)
column
列位置处的列名称。
column
- 在视图中查询的列
column
位置的列名称,其中第一列为列 0public Class<?> getColumnClass(int column)
column
列位置处的列类型。
column
- 在视图中查询的列
column
位置的列类型,其中第一列为列 0public Object getValueAt(int row, int column)
row
和 column
位置的单元格值。
注:列是以表视图的显示顺序,而不是以 TableModel
的列顺序指定的。这是一项重要的区别,因为在用户重新安排表中的列时,视图中给定索引处的列将更改。同时用户的操作不会影响模型的列顺序。
row
- 其值要被查询的行column
- 其值要被查询的列
public void setValueAt(Object aValue, int row, int column)
row
和 column
位置的单元格值。
注:列是以表视图的显示顺序,而不是以 TableModel
的列顺序指定的。这是一项重要的区别,因为在用户重新安排表中的列时,视图中给定索引处的列将更改。同时用户的操作不会影响模型的列顺序。
aValue
是一个新值。
aValue
- 新值row
- 要更改的单元格所在的行column
- 要更改的单元格所在的列getValueAt(int, int)
public boolean isCellEditable(int row, int column)
row
和 column
位置的单元格是可编辑的,则返回 true。否则,在单元格上调用 setValueAt
没有任何效果。
注:列是以表视图的显示顺序,而不是以 TableModel
的列顺序指定的。这是一项重要的区别,因为在用户重新安排表中的列时,视图中给定索引处的列将更改。同时用户的操作不会影响模型的列顺序。
row
- 其值要被查询的行column
- 其值要被查询的列
setValueAt(java.lang.Object, int, int)
public void addColumn(TableColumn aColumn)
aColumn
追加到此 JTable
的列模型所保持的列数组的尾部。如果 aColumn
的列名称为 null
,则将 aColumn
的列名称设置为 getModel().getColumnName()
所返回的名称。
要向此 JTable
添加一列,以用给定的 width
、cellRenderer
和 cellEditor
来显示模型中第 modelColumn
列的数据,可以使用以下方法:
addColumn(new TableColumn(modelColumn, width, cellRenderer, cellEditor));[
TableColumn
构造方法中的任何一个方法都可以用来替代此方法。]模型的列号存储在 TableColumn
中,在呈现和编辑过程中使用该列号来定位模型中合适的数据值。当列在视图中重新排序时,不更改模型的列号。
aColumn
- 要添加的 TableColumn
removeColumn(javax.swing.table.TableColumn)
public void removeColumn(TableColumn aColumn)
JTable
的列数组中移除 aColumn
。注:此方法不从模型中移除数据列;它只移除负责显示它的 TableColumn
。
aColumn
- 要移除的 TableColumn
addColumn(javax.swing.table.TableColumn)
public void moveColumn(int column, int targetColumn)
column
列移动到当前被 targetColumn
列所占用的位置。targetColumn
位置上的原有列向左或右移动以腾出空间。
column
- 要移动的列的索引targetColumn
- 列的新索引public int columnAtPoint(Point point)
point
所在的列索引;如果结果不在 [0, getColumnCount()
-1] 范围内,则返回 -1。
point
- 要查询的位置
point
所在的列索引;如果结果不在 [0, getColumnCount()
-1] 范围内,则返回 -1rowAtPoint(java.awt.Point)
public int rowAtPoint(Point point)
point
所在的行索引;如果结果不在 [0, getRowCount()
-1] 范围内,则返回 -1。
point
- 要查询的位置
point
所在的行索引;如果结果不在 [0, getRowCount()
-1] 范围内,则返回 -1columnAtPoint(java.awt.Point)
public Rectangle getCellRect(int row, int column, boolean includeSpacing)
row
和 column
相交位置的单元格矩形。如果 includeSpacing
为 true,则返回的值具有指定行和列的完整高度和宽度。如果为 false,则返回的矩形为单元格空间减去单元格间的间隙,以便在呈现期间设置该属性后,返回呈现和编辑的组件的真实边界。
如果列索引有效但是行索引小于 0,则此方法返回一个矩形,此矩形的 y
和 height
设置为合适的值,其 x
和 width
值都设置为 0。通常,行索引或列索引指示适当区域外的单元格时,此方法都返回一个矩形,它描绘了表范围内最近单元格的最近边。当行索引和列索引都超出范围时,返回的矩形覆盖了最近单元格的最近点。
在所有的情形中,使用此方法沿一个轴的计算结果不会因为沿另一个轴的计算出现异常而失败。当单元格无效时,忽略 includeSpacing
参数。
row
- 所需单元格所在的行索引column
- 所需单元格所在的列索引;不一定与表中数据模型的列索引相同;convertColumnIndexToView(int)
方法可以用来将数据模型的列索引转换为显示的列索引includeSpacing
- 如果为 false,则返回实际的单元格边界,计算方法是从列模型和行模型的高度和宽度中减去单元格间距
row
、column
处单元格的矩形getIntercellSpacing()
public void doLayout()
JTable
列的总宽度等于表的宽度。
开始布局之前,此方法获取 tableHeader
的 resizingColumn
。当由于要调整封闭窗口的大小而调用此方法时,resizingColumn
为 null
。这意味着调整大小发生在 JTable
的“外部”,并且更改(或 "delta" )应该分布到所有列,无论此 JTable
的自动调整大小模式如何。
如果 resizingColumn
不为 null
,则它是发生大小更改的表中的一列,而不是表本身。在这种情况下,自动调整大小模式控制额外(或不足)空间在可用列之间的分布方式。
该模式有:
Viewport
的宽度时,使用水平滚动条来适应列的宽度。如果 JTable
没有封闭在 JScrollPane
中,则可能导致该表的一部分不可见。
JTable
中的所有列之间,包括正在被调整的列。
JTable
调整列宽时,它绝对遵守其最小值和最大值。但是即使在调用此方法后,列的总宽度仍然可能不等于表的宽度。发生这种情况时,JTable
不会进入 AUTO_RESIZE_OFF 模式来生成一个滚动条,或者中断其当前自动调整模式的其他提交,相反,它允许其边界设置为大于(或小于)最大总宽度(或最小总宽度),这意味着要么没有足够的空间来显示所有的列,要么就是列不能填满 JTable
的边界。这将分别导致在绘制期间,某些列将被剪切掉,或者某个区域将被绘制为 JTable
的背景色。
用于在可用列之间分布 delta 的机制是由 JTable
类中的一个私有方法提供的:
adjustSizes(long targetSize, final Resizable3 r, boolean inverse)以下部分是对它的解释。
Resizable3
是一个私有接口,它允许包含元素(具有大小、首选大小、最大大小和最小大小)集合的任何数据结构可以通过该算法来操作其元素。
将 r 中各元素的目标大小与首选大小总和之间的差值称为 "DELTA"。单独的大小通过将原始首选大小加上 DELTA 的共享部分来计算,该共享部分基于每个首选大小到其限定边界的距离(最小值或最大值)。
单独的约束称为 min[i]、max[i] 和 pref[i]。
它们相应的和称为:MIN、MAX 和 PREF。
用以下公式计算每个新大小:
size[i] = pref[i] + delta[i]其中每个单独的 delta[i] 根据以下条件计算:
如果 (DELTA < 0),则处于收缩模式,其中:
DELTA delta[i] = ------------ * (pref[i] - min[i]) (PREF - MIN)如果 (DELTA > 0),则处于扩展模式,其中:
DELTA delta[i] = ------------ * (max[i] - pref[i]) (MAX - PREF)
总体效果是总大小向总的最小值或最大值移动相同的百分比 k,此百分比确保适应所需的间距,即 DELTA。
估计此处给出的公式计算易受累积舍入误差的影响,该误差是由此操作的有限精度(使用 int)引起的。为了处理此问题,要经常重新计算上述乘数,这可将以前迭代中的舍入误差考虑在内。结果是一个生成一组整数的算法,这组整数值的和恰好等于提供的 targetSize
,这是通过将舍入误差均匀分散到给定元素上来实现的。
当 targetSize
处于 [MIN, MAX] 范围外时,算法将所有大小设置为其适合的限定值(最大值或最小值)。
Container
中的 doLayout
LayoutManager.layoutContainer(java.awt.Container)
,
Container.setLayout(java.awt.LayoutManager)
,
Container.validate()
@Deprecated public void sizeColumnsToFit(boolean lastColumnOnly)
doLayout()
取代。
doLayout()
public void sizeColumnsToFit(int resizingColumn)
doLayout()
方法。
resizingColumn
- 由于大小的改变导致需要进行此调整的列;如果没有这样的列,则为 -1doLayout()
public String getToolTipText(MouseEvent event)
JComponent
的 getToolTipText
方法,从而允许使用渲染器的提示(如果设置了文本)。
JTable
正确显示其渲染器的工具提示,JTable
必须是 ToolTipManager
中的注册组件。此操作可在 initializeLocalVars
中自动完成,但是如果之后在 JTable
上调用了 setToolTipText(null)
,则这是一个注销的表组件,渲染器的提示将不再显示。
JComponent
中的 getToolTipText
JComponent.getToolTipText()
public void setSurrendersFocusOnKeystroke(boolean surrendersFocusOnKeystroke)
surrendersFocusOnKeystroke
- 如果在键击导致编辑器被激活时编辑器应该获得焦点,则为 truegetSurrendersFocusOnKeystroke()
public boolean getSurrendersFocusOnKeystroke()
setSurrendersFocusOnKeystroke(boolean)
public boolean editCellAt(int row, int column)
row
和 column
位置的索引在有效范围内,并且这些索引处的单元格是可编辑的,则以编程方式启动该位置单元格的编辑。注意,这是 editCellAt(int, int, null)
的一种便捷方法。
row
- 要编辑的行column
- 要编辑的列
public boolean editCellAt(int row, int column, EventObject e)
row
和 column
位置的索引在有效范围内,并且这些索引处的单元格是可编辑的,则以编程方式启动该位置单元格的编辑。要防止 JTable
编辑特定的表、列或单元格的值,TableModel
接口中的 isCellEditable
方法应返回 false。
row
- 要编辑的行column
- 要编辑的列e
- 要传递到 shouldSelectCell
中的事件;注意,从 Java 2 平台 v1.2 开始,不再调用 shouldSelectCell
public boolean isEditing()
editingColumn
,
editingRow
public Component getEditorComponent()
public int getEditingColumn()
editingRow
public int getEditingRow()
editingColumn
public TableUI getUI()
TableUI
对象public void setUI(TableUI ui)
ui
- TableUI L&F 对象UIDefaults.getUI(javax.swing.JComponent)
public void updateUI()
UIManager
发出的表明 L&F 已经更改的通知。用 UIManager
的最新版本替换当前的 UI 对象。
JComponent
中的 updateUI
JComponent.updateUI()
public String getUIClassID()
JComponent
中的 getUIClassID
JComponent.getUIClassID()
,
UIDefaults.getUI(javax.swing.JComponent)
public void setModel(TableModel dataModel)
newModel
,并向其注册以获取来自新数据模型的侦听器通知。
dataModel
- 此表的新数据源
IllegalArgumentException
- 如果 newModel
为 null
getModel()
public TableModel getModel()
JTable
所显示数据的 TableModel
。
JTable
所显示数据的 TableModel
setModel(javax.swing.table.TableModel)
public void setColumnModel(TableColumnModel columnModel)
newModel
,并向其注册以获取来自新数据模型的侦听器通知。还要将 JTableHeader
的列模型设置为 columnModel
。
columnModel
- 此表的新数据源
IllegalArgumentException
- 如果 columnModel
为 null
getColumnModel()
public TableColumnModel getColumnModel()
TableColumnModel
。
setColumnModel(javax.swing.table.TableColumnModel)
public void setSelectionModel(ListSelectionModel newModel)
newModel
,并向其注册以获取来自新数据模型的侦听器通知。
newModel
- 新的选择模型
IllegalArgumentException
- 如果 newModel
为 null
getSelectionModel()
public ListSelectionModel getSelectionModel()
ListSelectionModel
。
null
setSelectionModel(javax.swing.ListSelectionModel)
public void sorterChanged(RowSorterEvent e)
RowSorter
以某种方式发生了更改的 RowSorterListener
通知。
RowSorterListener
中的 sorterChanged
e
- 描述更改的 RowSorterEvent
NullPointerException
- 如果 e
为 null
public void tableChanged(TableModelEvent e)
TableModel
生成 TableModelEvent
时调用。应在该模型的坐标系统中构造 TableModelEvent
;当此 JTable
接收事件时,它执行到视图坐标系统的适当映射。
应用程序代码不显式地使用这些方法,它们由 JTable
在内部使用。
注意,从 1.3 版本开始,此方法清除选择(如果有)。
TableModelListener
中的 tableChanged
public void columnAdded(TableColumnModelEvent e)
应用程序代码不显式地使用这些方法,它们由 JTable 在内部使用。
TableColumnModelListener
中的 columnAdded
TableColumnModelListener
public void columnRemoved(TableColumnModelEvent e)
应用程序代码不显式地使用这些方法,它们由 JTable 在内部使用。
TableColumnModelListener
中的 columnRemoved
TableColumnModelListener
public void columnMoved(TableColumnModelEvent e)
应用程序代码不显式地使用这些方法,它们由 JTable 在内部使用。
TableColumnModelListener
中的 columnMoved
e
- 接收到的事件TableColumnModelListener
public void columnMarginChanged(ChangeEvent e)
应用程序代码不显式地使用这些方法,它们由 JTable 在内部使用。
TableColumnModelListener
中的 columnMarginChanged
e
- 接收到的事件TableColumnModelListener
public void columnSelectionChanged(ListSelectionEvent e)
TableColumnModel
的选择模型更改时调用。
应用程序代码不显式地使用这些方法,它们由 JTable 在内部使用。
TableColumnModelListener
中的 columnSelectionChanged
e
- 接收到的事件TableColumnModelListener
public void valueChanged(ListSelectionEvent e)
应用程序代码不显式地使用这些方法,它们由 JTable 在内部使用。
ListSelectionListener
中的 valueChanged
e
- 接收到的事件ListSelectionListener
public void editingStopped(ChangeEvent e)
应用程序代码不显式地使用这些方法,它们由 JTable 在内部使用。
CellEditorListener
中的 editingStopped
e
- 接收到的事件CellEditorListener
public void editingCanceled(ChangeEvent e)
应用程序代码不显式地使用这些方法,它们由 JTable 在内部使用。
CellEditorListener
中的 editingCanceled
e
- 接收到的事件CellEditorListener
public void setPreferredScrollableViewportSize(Dimension size)
size
- 指定 JViewport
(其视图为此表)的 preferredSize
的 Dimension
对象Scrollable.getPreferredScrollableViewportSize()
public Dimension getPreferredScrollableViewportSize()
Scrollable
中的 getPreferredScrollableViewportSize
JViewport
(它显示此表)的 preferredSize
的 Dimension
对象Scrollable.getPreferredScrollableViewportSize()
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction)
用户每次请求一个单位的滚动时,就调用此方法。
Scrollable
中的 getScrollableUnitIncrement
visibleRect
- 视口中可见的视图区域orientation
- SwingConstants.VERTICAL
或 SwingConstants.HORIZONTAL
direction
- 小于 0 向上/左滚动,大于 0 向下/右滚动
Scrollable.getScrollableUnitIncrement(java.awt.Rectangle, int, int)
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction)
visibleRect.height
或 visibleRect.width
,这取决于此表的方向。注意,从 Swing 1.1.1 (Java 2 v 1.2.2) 开始,返回的值将确保视口在行边界上完全对齐。
Scrollable
中的 getScrollableBlockIncrement
visibleRect
- 视口内可见的视图区域orientation
- SwingConstants.VERTICAL 或 SwingConstants.HORIZONTAL。direction
- 小于 0 为向上/左滚动,大于 0 为向下/右滚动。
visibleRect.height
或 visibleRect.width
Scrollable.getScrollableBlockIncrement(java.awt.Rectangle, int, int)
public boolean getScrollableTracksViewportWidth()
autoResizeMode
设置为 AUTO_RESIZE_OFF
,则返回 false,这指示表的宽度不是由视口的宽度决定的。否则返回 true。
Scrollable
中的 getScrollableTracksViewportWidth
autoResizeMode
设置为 AUTO_RESIZE_OFF
,则返回 false;否则返回 trueScrollable.getScrollableTracksViewportWidth()
public boolean getScrollableTracksViewportHeight()
false
指示表的高度不是由视口的高度决定的,除非 getFillsViewportHeight
为 true
并且该表的首选高度小于视口的高度。
Scrollable
中的 getScrollableTracksViewportHeight
false
,除非 getFillsViewportHeight
为 true
并且需要延伸该表以填充视口Scrollable.getScrollableTracksViewportHeight()
,
setFillsViewportHeight(boolean)
,
getFillsViewportHeight()
public void setFillsViewportHeight(boolean fillsViewportHeight)
false
。
fillsViewportHeight
- 此表是否始终大到足以填充封闭视口的高度getFillsViewportHeight()
,
getScrollableTracksViewportHeight()
public boolean getFillsViewportHeight()
setFillsViewportHeight(boolean)
protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed)
JComponent
复制的描述KeyEvent
e
而调用此方法处理 ks
的键绑定。此方法将获取适当的 InputMap
、获取绑定、从 ActionMap
获取动作,然后(如果找到该动作并且已启用该组件)调用 notifyAction
来通知该动作。
JComponent
中的 processKeyBinding
ks
- 被查询的 KeyStroke
e
- KeyEvent
condition
- 为下列值之一:
pressed
- 如果键被按下,则为 true
protected void createDefaultRenderers()
DefaultTableCellRenderer
protected void createDefaultEditors()
DefaultCellEditor
protected void initializeLocalVars()
protected TableModel createDefaultDataModel()
DefaultTableModel
。子类可以重写此方法以返回不同的表模型对象。
DefaultTableModel
protected TableColumnModel createDefaultColumnModel()
DefaultTableColumnModel
。子类可以重写此方法以返回不同的列模型对象。
DefaultTableColumnModel
protected ListSelectionModel createDefaultSelectionModel()
DefaultListSelectionModel
。子类可以重写此方法以返回不同的选择模型对象。
DefaultListSelectionModel
protected JTableHeader createDefaultTableHeader()
JTableHeader
。子类可以重写此方法以返回不同的表标题对象。
JTableHeader
protected void resizeAndRepaint()
revalidate
再调用 repaint
。
public TableCellEditor getCellEditor()
null
。
TableCellEditor
;如果该表当前没有被编辑,则返回 null
。cellEditor
,
getCellEditor(int, int)
public void setCellEditor(TableCellEditor anEditor)
anEditor
- 活动单元格编辑器cellEditor
public void setEditingColumn(int aColumn)
editingColumn
变量。
aColumn
- 要编辑的单元格所在的列editingColumn
public void setEditingRow(int aRow)
editingRow
变量。
aRow
- 要编辑的单元格所在的行editingRow
public TableCellRenderer getCellRenderer(int row, int column)
TableColumn
有一个非 null 的渲染器,则返回它。如果没有,则查找此列中的数据类(使用 getColumnClass
),并返回此数据类型的默认渲染器。
注:在整个表的包中,内部实现始终使用此方法来提供渲染器,以便子类能够安全地重写此默认行为。
row
- 要呈现的单元格所在的行,其中第一行为 0column
- 要呈现的单元格所在的列,其中第一列为 0
null
,则返回此类型对象的默认渲染器DefaultTableCellRenderer
,
TableColumn.setCellRenderer(javax.swing.table.TableCellRenderer)
,
setDefaultRenderer(java.lang.Class>, javax.swing.table.TableCellRenderer)
public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
row
、column
处单元格值的数据模型和单元格选择状态来准备渲染器。返回事件所在的组件(可能是 Component
或 JComponent
)。
打印操作期间,此方法将配置不指示选择和焦点的渲染器,以防止它们出现在打印输出中。要执行基于该表是否打印的其他定制,可以检查 JComponent.isPaintingForPrint()
的值(在此处或者在自定义渲染器中)。
注:在整个表的包中,内部实现始终使用此方法来准备渲染器,以便子类能够安全地重写此默认行为。
renderer
- 要准备的 TableCellRenderer
row
- 要呈现的单元格所在的行,其中第一行为 0column
- 要呈现的单元格所在的列,其中第一列为 0
Component
public TableCellEditor getCellEditor(int row, int column)
row
和 column
所指定单元格的编辑器。如果此列的 TableColumn
有一个非 null 的编辑器,则返回它。如果没有,则查找此列中的数据类(使用 getColumnClass
),并返回此类型数据的默认编辑器。
注:在整个表的包中,内部实现始终使用此方法来提供编辑器,以便子类能够安全地重写此默认行为。
row
- 要编辑的单元格所在的行,其中第一行为 0column
- 要编辑的单元格所在的列,其中第一列为 0
null
,则返回此类型单元格的默认编辑器DefaultCellEditor
public Component prepareEditor(TableCellEditor editor, int row, int column)
row
、column
处单元格值的数据模型和单元格选择状态来准备编辑器。
注:在整个表的包中,内部实现始终使用此方法来准备编辑器,以便子类能够安全地重写此默认行为。
editor
- 要设置的 TableCellEditor
row
- 要编辑的单元格所在的行,其中第一行为 0column
- 要编辑的单元格所在的列,其中第一列为 0
Component
public void removeEditor()
protected String paramString()
null
。
JComponent
中的 paramString
public boolean print() throws PrinterException
PrintMode.FIT_WIDTH
模式打印此 JTable
,不打印标题或脚注文本。打印期间将显示一个有模式的进度对话框(带有中止选项)。
注:在 headless 模式中,不显示对话框并且打印在默认打印机上进行。
SecurityException
- 如果不允许此线程启动打印作业请求
PrinterException
- 如果打印系统的错误导致打印作业中止print(JTable.PrintMode, MessageFormat, MessageFormat, boolean, PrintRequestAttributeSet, boolean, PrintService)
,
getPrintable(javax.swing.JTable.PrintMode, java.text.MessageFormat, java.text.MessageFormat)
public boolean print(JTable.PrintMode printMode) throws PrinterException
JTable
,不打印标题或脚注文本。打印期间将显示一个有模式的进度对话框(带有中止选项)。
注:在 headless 模式中,不显示对话框并且打印在默认打印机上进行。
printMode
- printable 应使用的打印模式
SecurityException
- 如果不允许此线程启动打印作业请求
PrinterException
- 如果打印系统的错误导致打印作业中止print(JTable.PrintMode, MessageFormat, MessageFormat, boolean, PrintRequestAttributeSet, boolean, PrintService)
,
getPrintable(javax.swing.JTable.PrintMode, java.text.MessageFormat, java.text.MessageFormat)
public boolean print(JTable.PrintMode printMode, MessageFormat headerFormat, MessageFormat footerFormat) throws PrinterException
JTable
,打印指定的标题和脚注文本。打印期间将显示一个有模式的进度对话框(带有中止选项)。
注:在 headless 模式中,不显示对话框并且打印在默认打印机上进行。
printMode
- printable 应使用的打印模式headerFormat
- 指定在打印标题中所用文本的 MessageFormat
,如果没有则为 nullfooterFormat
- 指定在打印脚注中所用文本的 MessageFormat
,如果没有则为 null
SecurityException
- 如果不允许此线程启动打印作业请求
PrinterException
- 如果打印系统的错误导致打印作业中止print(JTable.PrintMode, MessageFormat, MessageFormat, boolean, PrintRequestAttributeSet, boolean, PrintService)
,
getPrintable(javax.swing.JTable.PrintMode, java.text.MessageFormat, java.text.MessageFormat)
public boolean print(JTable.PrintMode printMode, MessageFormat headerFormat, MessageFormat footerFormat, boolean showPrintDialog, PrintRequestAttributeSet attr, boolean interactive) throws PrinterException, HeadlessException
print
方法的指定打印此表,将默认打印机指定为打印服务。
printMode
- printable 应该使用的打印模式headerFormat
- 指定在打印标题中所用文本的 MessageFormat
,如果没有则为 null
footerFormat
- 指定在打印脚注中所用文本的 MessageFormat
,如果没有则为 null
showPrintDialog
- 是否显示打印对话框attr
- 指定所有打印属性的 PrintRequestAttributeSet
,如果没有则为 null
interactive
- 是否以交互模式打印
HeadlessException
- 如果要求方法显示打印对话框或交互运行,并且 GraphicsEnvironment.isHeadless
返回 true
SecurityException
- 如果不允许此线程启动打印作业请求
PrinterException
- 如果打印系统的错误导致打印作业中止print(JTable.PrintMode, MessageFormat, MessageFormat,
boolean, PrintRequestAttributeSet, boolean, PrintService)
,
getPrintable(javax.swing.JTable.PrintMode, java.text.MessageFormat, java.text.MessageFormat)
public boolean print(JTable.PrintMode printMode, MessageFormat headerFormat, MessageFormat footerFormat, boolean showPrintDialog, PrintRequestAttributeSet attr, boolean interactive, PrintService service) throws PrinterException, HeadlessException
JTable
。按照大多数开发人员所采取的步骤来打印 JTable
。简单地说,它准备表,调用 getPrintable
来获取合适的 Printable
,然后将其发送到打印机。
boolean
参数允许指定是否向用户显示打印对话框。显示打印对话框时,用户可以使用该对话框更改目标打印机或打印属性,甚至可以取消打印。另外两个参数允许指定 PrintService
和打印属性。这些参数可以用来提供打印对话框的初始值,或者在未显示对话框时指定值。
第二个 boolean
参数允许指定是否以交互模式执行打印。如果为 true
,则在打印期间将显示一个有模式的进度对话框(带有中止选项)。此对话框还可防止任何可能影响表的用户动作。但是,它不能防止代码对表的修改(例如,另一个线程使用 SwingUtilities.invokeLater
发送更新)。因此,开发人员要负责确保在打印期间没有任何其他代码会以任何方式修改表(无效的修改包括在大小、渲染器或底层数据方面的修改)。如果在打印期间更改了表,则会产生不确定的打印行为。
如果将此参数指定为 false
,则不显示对话框,打印将立即在事件指派进程上开始。在打印完成前,这将阻塞任何其他事件的处理(包括重新绘制)。尽管这有效地防止了对表的更改,但用户使用起来不是很方便。出于这个原因,建议只在从一个没有可视 GUI 的应用程序打印时才指定 false
。
注:在 headless 模式下,试图显示打印对话框或交互运行将导致 HeadlessException
。
获取 printable 前,此方法将会正常地终止编辑(如有必要),以防止编辑器在打印结果中显示。此外,JTable
在未指示选择和焦点的打印期间将准备好其渲染器。至于定制打印输出中表的外观的更多信息,开发人员可以提供自定义渲染器或者条件化 JComponent.isPaintingForPrint()
值的绘制模式。
有关如何打印表的更多描述,请参见 getPrintable(javax.swing.JTable.PrintMode, java.text.MessageFormat, java.text.MessageFormat)
。
printMode
- printable 应使用的打印模式headerFormat
- 指定在打印标题中所用文本的 MessageFormat
,如果没有则为 null
footerFormat
- 指定在打印脚注中所用文本的 MessageFormat
,如果没有则为 null
showPrintDialog
- 是否显示打印对话框attr
- 指定任何打印属性的 PrintRequestAttributeSet
,如果没有则为 null
interactive
- 是否以交互模式打印service
- 目标 PrintService
,或者为 null
,表示使用默认打印机
HeadlessException
- 如果要求方法显示打印对话框或交互运行,并且 GraphicsEnvironment.isHeadless
返回 true
SecurityException
- 如果安全管理器存在并且其 SecurityManager.checkPrintJobAccess()
方法不允许此线程创建打印作业请求
PrinterException
- 如果打印系统的错误导致打印作业中止getPrintable(javax.swing.JTable.PrintMode, java.text.MessageFormat, java.text.MessageFormat)
,
GraphicsEnvironment.isHeadless()
public Printable getPrintable(JTable.PrintMode printMode, MessageFormat headerFormat, MessageFormat footerFormat)
Printable
。
此方法用于希望定制 JTable
的 print
方法所使用的默认 Printable
实现的开发人员。只想打印该表的开发人员应该直接使用其中一个打印方法。
可以在两种打印模式的任意一个内请求 Printable
。在这两种模式中,它按顺序自然地将表的各行分散到多个页中,每页放入尽可能多的行。PrintMode.NORMAL
指定表以当前大小打印。在此模式中,可能需要以类似于行的方式将列分散到多页中。需要这样分散时,列以与表的 ComponentOrientation
一致的顺序进行分布。PrintMode.FIT_WIDTH
指定按比例缩小输出(如有必要),以在每页上放入表的整个宽度(凭此放入所有列)。宽度和高度等比例进行缩放,以保持输出的高宽比。
Printable
将该表 JTableHeader
(如果有)的合适部分作为每页上表部分的标题。
可以通过提供 MessageFormat
参数将标题和脚注文本添加到输出中。打印代码根据格式请求 String,提供可以包括在已格式化字符串中的单个项:表示当前页码的 Integer
。
当某些字符(例如单引号)是特殊字符并需要转义处理时,鼓励阅读 MessageFormat
的文档。
以下示例创建一个可用来打印 "Duke's Table Page - " 和当前页码的 MessageFormat
:
// notice the escaping of the single quote // notice how the page number is included with "{0}" MessageFormat format = new MessageFormat("Duke''s Table: Page - {0}");
Printable
限制向它打印的每一页的可打印区域所绘制的内容。在某些情况下,可能看到该区域不可能放入所有页的内容。在这种情况下,可以截取输出,但实现将采取一些合理的行为。以下是几种已知会发生的情况,以及如何通过此特定实现来处理它们:
ComponentOrientation
确定)开始打印尽可能多的文本。
PrintMode.NORMAL
中,当列太宽而无法放入可打印区域时,打印该列的中央部分,不打印表的左右边框。
将此 Printable
包装到另一个 Printable 中是完全有效的,这可以用来创建复杂的报告和文档。甚至可以请求将不同的页呈现到不同大小的可打印区域中。必须准备好让实现处理此问题(可能通过其布局计算动态完成)。但是,当必须跨页分散列时,为每页提供不同的高度可能无法与 PrintMode.NORMAL
正常工作。
至于定制打印结果中表的外观的信息,JTable
自身将在打印期间负责隐藏选择和焦点。对于其他定制,用户的渲染器或绘制模式可以定制基于 JComponent.isPaintingForPrint()
值的外观。
此外,调用此方法之前,可以首先 修改该表的状态,例如取消单元编辑或者让用户恰当地调整表的大小。但是,在获取此 Printable
之后,不得再修改该表的状态(无效的修改包括在大小或底层数据方面的修改)。如果更改了该表,返回 Printable
的行为将是不确定的。
printMode
- printable 应使用的打印模式headerFormat
- 指定在打印标题中所用文本的 MessageFormat
,如果没有则为 nullfooterFormat
- 指定在打印脚注中所用文本的 MessageFormat
,如果没有则为 null
Printable
print(JTable.PrintMode, MessageFormat, MessageFormat,
boolean, PrintRequestAttributeSet, boolean)
,
Printable
,
PrinterJob
public AccessibleContext getAccessibleContext()
Accessible
中的 getAccessibleContext
JComponent
中的 getAccessibleContext
|
JavaTM Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。