JTable 行列 相关设置:
// 设置所有行的行高
void setRowHeight(int rowHeight)
// 设置指定行的行高
void setRowHeight(int row, int rowHeight)
/**
- 设置当手动改变某列列宽时,其他列的列宽自动调整模式,
- 可选值:
JTable.AUTO_RESIZE_ALL_COLUMNS 在所有的调整大小操作中,按比例调整所有的列。
JTable.AUTO_RESIZE_LAST_COLUMN 在所有的调整大小操作中,只对最后一列进行调整。
JTable.AUTO_RESIZE_NEXT_COLUMN 在 UI 中调整了一个列时,对其下一列进行相反方向的调整。
JTable.AUTO_RESIZE_OFF 不自动调整列的宽度;使用滚动条。
JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS 在 UI 调整中,更改后续列以保持总宽度不变;此为默认行为。
*/
void setAutoResizeMode(int mode)
/*
调整列宽
*/
// 先获取到某列
TableColumn tableColumn = jTable.getColumnModel().getColumn(int columnIndex);
// 设置列的宽度、首选宽度、最小宽度、最大宽度
tableColumn.setWidth(int width);
tableColumn.setPreferredWidth(int preferredWidth);
tableColumn.setMinWidth(int minWidth);
tableColumn.setMaxWidth(int maxWidth);
// 调整该列的列宽,以适合其标题单元格的宽度。
tableColumn.sizeWidthToFit();
// 是否允许手动改变该列的列宽
tableColumn.setResizable(boolean isResizable);
// 设置该列的表头名称
tableColumn.setHeaderValue(Object headerValue);
数据相关操作:
表格数据的简单设置和获取
// 设置表格中指定单元格的数据
jTable.getModel().setValueAt(Object aValue, int rowIndex, int columnIndex);
// 获取表格中指定单元格的数据
Object value = jTable.getModel().getValueAt(int rowIndex, int columnIndex);
创建带滚动条的表格
- 效果
- 创建带滚动条的表格基本步骤:
创建表格
JTable table = new JTable(…);
设置表格相关数据
// 设置滚动面板视口大小(超过该大小的行数据,需要拖动滚动条才能看到)
table.setPreferredScrollableViewportSize(new Dimension(int width, int height));
创建滚动面板,把表格放到滚动面板中
再把滚动面板添加到其他容器中显示
TableModel
TableModel 接口指定了 JTable 用于询问表格式数据模型的方法。TableModel 封装了表格中的各种数据,为表格显示提供数据。上面案例中直接使用行数据和表头创建表格,实际上JTable 内部自动将传入的行数据和表头封装成了 TableModel。
只要数据模型实现了 TableModel 接口,就可以通过以下两行代码设置 JTable 显示该模型:
TableModel myData = new MyTableModel();
JTable table = new JTable(myData);
TableModel 接口中的方法:
/** 返回总行数 */ public int getRowCount(); /** 返回总列数 */ public int getColumnCount(); /** 返回指定列的名称(表头名称) */ public String getColumnName(int columnIndex); /** 针对列中所有的单元格值,返回最具体的超类。JTable 使用此方法来设置列的默认渲染器和编辑器。 */ public Class<?> getColumnClass(int columnIndex);
判断指定单元格是否可编辑
如果行和列中的单元格是可编辑的,则返回true。否则,在单元格上调用setValueAt将无效。
注意:该列是按表视图的显示顺序指定的,而不是按TableModel的列顺序指定的。这是一个重要的区别,因为当用户重新排列表中的列时,视图中给定索引处的列将发生变化。同时,用户的操作永远不会影响模型的列顺序。
/** 获取指定单元格的值 */
public Object getValueAt(int rowIndex, int columnIndex);
/** 设置指定单元格的值 */
public void setValueAt(Object aValue, int rowIndex, int columnIndex);
/** 添加表格模型监听器 */
public void addTableModelListener(TableModelListener l);
/** 移除表格模型监听器 */
public void removeTableModelListener(TableModelListener l);
}
JRE 中常用的已实现 TableModel 接口的类有两个:
(1)javax.swing.table.AbstractTableModel
此抽象类为 TableModel 接口中的大多数方法提供默认实现。它负责管理侦听器,并为生成 TableModelEvents 以及将其调度到侦听器提供方便。要创建一个具体的 TableModel 作为 AbstractTableModel 的子类,只需提供对以下三个方法的实现:
public int getRowCount(); public int getColumnCount(); public Object getValueAt(int row, int column);
(2)javax.swing.table.DefaultTableModel
这是 TableModel 的一个实现,它使用一个 Vector 来存储单元格的值对象,该 Vector 由多个 Vector 组成。DefaultTableModel 还增加了许多方便操作表格数据的方法,例如 支持 添加 和 删除 行列 等操作。