JTable 是一个 Java Swing 组件,用于在用户界面上展示和操作表格数据。它是 Java Swing 的一部分,遵循 Model-View-Controller (MVC) 设计模式。JTable 仅作为视图来展示数据,真正的数据存储和管理是由 TableModel 接口的实现类负责的。
在 JTable 中,表头(TableHeader)和每一列(TableColumn)都可以被单独处理,并且可以定制化显示各种类型的数据,如复选框(checkbox)、图像(img)等。JTable 还支持行和列的增删改查操作,并可以通过自定义渲染器(renderer)和编辑器(editor)来改变单元格和表头的显示方式和交互行为。
此外,JTable 还支持ToolTip(工具提示),可以为每个单元格或整个表头提供额外的信息,并且可以响应单元格值的变化,执行相应的操作。
在编程中,开发者可以通过继承 JTable 并重载相关方法来实现特定的功能需求,也可以通过实现 TableModel 接口来创建自定义的数据模型。
一、常用构造方法
1. public JTable(Object[][] rowData,Object []columnnames)
创建一个JTable对象,设置显示数据和表格的标题
2.public JTable(Vector rowData,Vector columnNames)
创建一个JTable对象,通过Vector设置显示数据和显示的标题
3.public JTable(TableModel dm)
使用TableModel创建表格
二、常用方法
1.setModel(TableModel dataModel): 设置表格的数据模型 (TableModel)。
2.getRowCount()
: 获取表格的行数。
3.getColumnCount()
: 获取表格的列数。
4.setRowHeight(int row, int height)
: 设置指定行的高度。
5.getColumnWidth(int column)
: 获取指定列的宽度。
6.setColumnWidth(int column, int width)
: 设置指定列的宽度。
7.getValueAt(int row, int column)
: 获取指定单元格的值。
8.setalueAt(Object value, int row, int column)
: 设置指定单元格的值。
9.getCellEditor(int row, int column)
: 获取指定单元格的编辑器
10.getCellRenderer(int row, int column)
: 获取指定单元格的渲染器
11.getSelectedRow()
: 获取当前选中行的索引。
12.getSelectedRows()
: 获取所有选中行的索引数组。
13.getColumnClass(int col)
:获取指定列的数据类型。
14.addRow(Object[] rowData)
:添加一行数据。
15.removeRow(int row)
:移除指定行。
16.isCellEditable(int row, int col)
:判断指定单元格是否可编辑。
JTable还有其他的方法,本文仅列出部分,更多请查看官网的说明文档
三、JTable组件的应用举例
根据JTable类的构造方法,可以采取不同的形式创建表格对象。下面分别以JTable(Object[][] rowData,Object []columnnames)和JTable(TableModel dm)构造方法为例说明如何创建表格。
1.使用JTable(Object[][] rowData,Object []columnnames)构造方法创建表格
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.text.TableView;
public class TableDemo extends JFrame {
public String [][]students = {
{"1001","张三","23","职业学院","软件技术专业"},
{"1002","李四","22","职业学院","软件技术专业"},
{"1003","王五","21","职业学院","软件技术专业"},
{"1004","赵六","20","职业学院","软件技术专业"}
};
public String []tableheader = {"学号","姓名","年龄","学校","专业"};
public TableDemo(){
initTableNoModel();//使用JTable(row[][],colu[])创建表格
}
public static void main(String args[]){
new TableDemo();
}
//使用JTable(object[][] rowdatas,object []columnames)构造方法创建一个JTable实例
public void initTableNoModel(){
JTable studentTable = new JTable(students,tableheader);//创建表格对象
TableColumn stucolumn = null;
int counts = studentTable.getColumnCount();//获取表格行数
for(int i=0;i<counts;i++)
{
stucolumn = studentTable.getColumnModel().getColumn(i);
stucolumn.setPreferredWidth(100);//为表格列设置宽度
}
studentTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);//关闭表格自动设定大小
JScrollPane tablesp = new JScrollPane(studentTable);//为表格添加滚动条
tablesp.setSize(400,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.add(tablesp);//将表格对象添加到JFrame中
this.pack();
this.setVisible(true);
}
}
运行以上程序,结果显示如下图所示。
2.使用JTable(TableModel dm)构造方法创建表格
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.text.TableView;
public class TableDemo extends JFrame {
public String []tableheader = {"学号","姓名","年龄","学校","专业"};
public TableDemo(){
initTableWithModel();//使用DefaultTableModel创建表格
}
public static void main(String args[]){
new TableDemo();
}
//使用DefaultTableModel创建表格,第一个参数是表头,第二个参数表示行数
public void initTableWithModel(){
//创建一个以给定数组为表头、行数为0的表格模型
DefaultTableModel tableModel = new DefaultTableModel(tableheader,0);
//使用一个循环语句为表格模型添加数据
for(int i=1;i<10;i++){
String row[]={"100"+i,"学生"+i,"21","职业学院","软件技术"};
tableModel.addRow(row);//向模型中添加行
}
JTable stutable = new JTable(tableModel);//以模型为参数创建表格对象
stutable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);//禁止表格自动适应列宽
JScrollPane jsp = new JScrollPane(stutable);//为表格添加滚动条
jsp.setSize(500,400);
this.add(jsp);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.pack();
}
}
运行以上程序,结果显示如下图所示。
JTable类还有众多的方法可以在设置表格格式上起到很好的作用。假设创建的表格对象为stutable,使用的表格模型对象是stumodel,以下代码可以扩展表格的相关应用。
//stutable是创建的表格对象,stumodel是数据模型
//设置表格排序器--单击列标题实现升序、降序排序
stutable.setRowSorter(new TableRowSorter(stumodel));
//设置表格的高度
stutable.setRowHeight(40);
//设置单元格的字体
stutable.setFont(new Font("微软雅黑",Font.PLAIN,15));
//设置边框样式与颜色
stutable.setBorder(BorderFactory.createLineBorder(Color.BLUE));
//设置表格单行选择模式
stutable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//设置表格多行选择模式,ctrl+鼠标多选
stutable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
关于JTable更多的应用,请读者参考相关说明文档。