目录
一、基本表格
二、修改列宽并显示列的名称
三、使用AbstractTableModel抽象类存储数据
一、基本表格
显示一个Table需要两组数据
1. 一维数组: String[]columnNames 表示表格的标题
2. 二维数组: String[][] heros 表格中的内容
默认情况下,表格的标题是不会显示出来了,除非使用了JScrollPane
import javax.swing.JFrame;
import javax.swing.JTable;
public class TestGUI {
public static void main(String[] args) {
JFrame f = new JFrame("LoL");
f.setSize(400, 300);
f.setLocation(200, 200);
f.setLayout(new BorderLayout());
// 表格上的title
String[] columnNames = new String[] { "id", "name", "hp", "damage" };
// 表格中的内容,是一个二维数组
String[][] heros = new String[][] {
{ "1", "盖伦", "616", "100" },
{ "2", "提莫", "512", "102" },
{ "3", "奎因", "832", "200" } };
JTable t = new JTable(heros, columnNames);
f.add(t, BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
二、修改列宽并显示列的名称
修改列宽很简单,主要是调用Jtable类当中的API
t.getColumnModel().getColumn(0).setPreferredWidth(10);
想要显示列名需要使用JScrollPane组件,注意点就是使用Jtable对象新建一个JScrollPane组件,并且将JScrollPane添加到顶层容器Frame中。(注意不要再添加Jtable对象了)
JScrollPane sp = new JScrollPane(t);
f.add(sp, BorderLayout.CENTER);
三、使用AbstractTableModel抽象类存储数据
首先说下TableModel的设计思想,在Model这种思想的指导下,数据和显示分离开来了。 比如对于JTable而言,有数据部分,也有显示部分(比如列宽等信息)。 数据部分,专门做一个类,叫做TableModel,就用于存放要显示的数据。
使用TableModel的方式存放Table需要显示的数据,HeroTableModel 继承AbstractTableModel ,进而实现了接口TableModel,在HeroTableModel 中提供一个table显示需要的所有信息
- getRowCount 返回一共有多少行
- getColumnCount 返回一共有多少列
- getColumnName 每一列的名字
- isCellEditable 单元格是否可以修改
- getValueAt 每一个单元格里的值
import javax.swing.table.AbstractTableModel;
public class HeroTableModel extends AbstractTableModel {
String[] columnNames = new String[] { "id", "name", "hp", "damage" };
String[][] heros = new String[][] { { "1", "盖伦", "616", "100" },
{ "2", "提莫", "512", "102" }, { "3", "奎因", "832", "200" } };
// 返回一共有多少行
public int getRowCount() {
// TODO Auto-generated method stub
return heros.length;
}
// 返回一共有多少列
public int getColumnCount() {
// TODO Auto-generated method stub
return columnNames.length;
}
// 获取每一列的名称
public String getColumnName(int columnIndex) {
// TODO Auto-generated method stub
return columnNames[columnIndex];
}
// 单元格是否可以修改
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
// 每一个单元格里的值
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return heros[rowIndex][columnIndex];
}
}
实际上,我们之前新建的JTable是使用如下形式的构造方法:
JTable(Object[][] rowData, Object[] columnNames)
如图所示,在JTable的的源代码中,它就会根据rowData和columnNames去创建一个TableModel对象。