天天看点

Java Swing JTable(下)数据相关操作:创建带滚动条的表格TableModel

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);

创建带滚动条的表格

  • 效果
  • Java Swing JTable(下)数据相关操作:创建带滚动条的表格TableModel
  • 创建带滚动条的表格基本步骤:

创建表格

JTable table = new JTable(…);

设置表格相关数据

// 设置滚动面板视口大小(超过该大小的行数据,需要拖动滚动条才能看到)

table.setPreferredScrollableViewportSize(new Dimension(int width, int height));

创建滚动面板,把表格放到滚动面板中

Java Swing JTable(下)数据相关操作:创建带滚动条的表格TableModel

再把滚动面板添加到其他容器中显示

Java Swing JTable(下)数据相关操作:创建带滚动条的表格TableModel

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的列顺序指定的。这是一个重要的区别,因为当用户重新排列表中的列时,视图中给定索引处的列将发生变化。同时,用户的操作永远不会影响模型的列顺序。

Java Swing JTable(下)数据相关操作:创建带滚动条的表格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 还增加了许多方便操作表格数据的方法,例如 支持 添加 和 删除 行列 等操作。