目录
一、基本表格
二、修改列宽并显示列的名称
三、使用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());// 表格上的titleString[] 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);
首先说下TableModel的设计思想,在Model这种思想的指导下,数据和显示分离开来了。 比如对于JTable而言,有数据部分,也有显示部分(比如列宽等信息)。 数据部分,专门做一个类,叫做TableModel,就用于存放要显示的数据。
使用TableModel的方式存放Table需要显示的数据,HeroTableModel 继承AbstractTableModel ,进而实现了接口TableModel,在HeroTableModel 中提供一个table显示需要的所有信息
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 stubreturn heros.length;}// 返回一共有多少列public int getColumnCount() {// TODO Auto-generated method stubreturn columnNames.length;}// 获取每一列的名称public String getColumnName(int columnIndex) {// TODO Auto-generated method stubreturn columnNames[columnIndex];}// 单元格是否可以修改public boolean isCellEditable(int rowIndex, int columnIndex) {return false;}// 每一个单元格里的值public Object getValueAt(int rowIndex, int columnIndex) {// TODO Auto-generated method stubreturn heros[rowIndex][columnIndex];}}
实际上,我们之前新建的JTable是使用如下形式的构造方法:
JTable(Object[][] rowData, Object[] columnNames)
如图所示,在JTable的的源代码中,它就会根据rowData和columnNames去创建一个TableModel对象。