创建表格需创建数据模型,有两种数据模型DefaultTableModel和AbstractTableModel,DefaultTableModel是java_api中提供的类可以直接使用, AbstractTableModel是接口需覆盖其中的方法,不多,就三种方法:getRowCount(),getColumnCount(),getValueAt()。
1.用 DefaultTableModel创建表格
DefaultTableModel是java api中提供的类,用它可以很容易的创建表格,如创建4行3列的表格:
javax.swing .table.DefaultTableModel dtm = new javax.swing .table.DefaultTableModel(4,3);
javax.swing.JTable jt = new javax.swing.JTable(dtm);
好了表格创建好了,只需把 jt 加入窗口就可使用了。其他一些对表格的操作java api已经提供,可以直接查java api。
2.用 AbstractTableModel 创建表格
用AbstractTableModel创建表格需要写一个类实现接口,类中需要包含一个二维数组,二维数组中的内容就是表格中的内容,如:
public class TableValues extends AbstractTableModel{
public int[][] values = {{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7},{4,5,6,7,8}}; //二维数组
public int getRowCount() { //覆盖getRowCount(),返回行数
return values.length;
}
public int getColumnCount() { //覆盖getColumnCount(),返回列数
return values[0].length;
}
public Object getValueAt(int rowIndex, int columnIndex) {//返回指定位置元素
return values[rowIndex][columnIndex];
}
}
接着就是如何来创建表格,如下:
javax.swing.JTable jt = new javax.swing.JTable(new TableValues());
下面的代码是包含两种数据模型DefaultTableModel和AbstractTableModel的例子:
import javax.swing.table.AbstractTableModel;
import java.awt.*;
import javax.swing.*;
public class TableValues extends AbstractTableModel{
public int[][] values = {{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7},{4,5,6,7,8}};
public int getRowCount() {
return values.length;
}
public int getColumnCount() {
return values[0].length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return values[rowIndex][columnIndex];
}
}
public class SimpleTableTest extends JFrame{
public SimpleTableTest() {
Container pane = getContentPane();
pane.setLayout(new BorderLayout());
TableValues tv = new TableValues();
table =new JTable(tv);
table1 = new JTable(new javax.swing.table.DefaultTableModel(4, 5));
pane.add(table,BorderLayout.CENTER);
pane.add(table1,BorderLayout.SOUTH);
}
protected JTable table,table1;
public static void main(String[] args){
SimpleTableTest stt = new SimpleTableTest();
stt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
stt.setSize(400, 200);
stt.setVisible(true);
}
}
执行结果: