JavaSwing 表格JTable内容居中 自定义TableModel

自定义TableModel

Swing提供了一个默认的TableModel——DefaultTableModel,它可以提供比较通用的数据设置功能,可以将表格内容放到一个二维数据或Vecor中作为参数传入,一个一维数据作为表头列名,方法如下:

public void setDataVector(Object[][] dataVector, Object[] columnIdentifiers)


public void setDataVector(Vector dataVector, Vector columnIdentifiers)


但是有时候这种方式使用起来并不方便,需要将数据转换成二维数据后才可以使用,比如一个我从数据库中查找到一个List<Student>集合,就要将所有Student遍历,并将Student对象的每个字段放到二维数据中。此时我们可以自定义一个TableModel。JavaAPI中提供一个AbstractTableModel抽象类,它为我们实现了大部分功能,我们只需要实现我们关心的部分即可,假设我们的TableModel类名为StudentTableModel

public class StudentTableModel extends AbstractTableModel{

	private List<Student> students;//数据集合,即需要展示的数据集
	
	public StudentTableModel(List<Student> list){//构造方法,在创建对象时就将数据传入
		this.students = list;
	}

	@Override
	public int getRowCount() {//行数,即数据集合List的大小
		return this.students.size();
	}

	@Override
	public int getColumnCount() {
		return 4;//列数,固定值,即Student类有几个字段就有几列
	}

	//这个方法是关键,给定行号及列号,返回一个元素。我们以List的下标为行号,列号对应Student的不同字段
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		switch (columnIndex) {
		case 0:
			return rowIndex+1+"";
		case 1:
			return this.students.get(rowIndex).getStudentNo();
		case 2:
			return this.students.get(rowIndex).getStudentName();
		case 3:
			return this.students.get(rowIndex).getEmailAddress();
		default:
			return "-";
		}
	}

	//列名,给定列号,返回列名
	@Override
	public String getColumnName(int column) {
		switch (column) {
		case 0:
			return "序号";
		case 1:
			return "学号";
		case 2:
			return "姓名";
		case 3:
			return "邮箱地址";
		default:
			return "-";
		}
	}

	public List<Student> getstudents() {
		return students;
	}

	public void setstudents(List<Student> students) {
		this.students = students;
	}

	
}

如何使用自定义TableModel

ScrollPanel scrollPanel = new JScrollPane();
StudentTableModel tableModel = new StudentTableModel(studentList);//创建StudentTableModel,传入内容数据集合
JTable jtable = new JTable(tableModel);//使用接受TableModel参数的构造方法创建JTable
jtable.getColumnModel().getColumn(0).setPreferredWidth(5);//设置第一列的列宽
DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();//单元格渲染器
tcr.setHorizontalAlignment(JLabel.CENTER);//居中显示
jtable.setDefaultRenderer(Object.class, tcr);//设置渲染器
scrollPanel.setViewportView(emailAddress);//将table放入scrollPanel




  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值