一、通过实现TableModel实现JTable的制作
TableModel接口有一下可实现的方法
@Override
public int getRowCount() { //得到行总数
}
@Override
public int getColumnCount() { //得到列总数
}
@Override
public Class<?> getColumnClass(int columnIndex) { //得到要加载的对象类型
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) { // 得到每一行的元素
}
@Override
public String getColumnName(int columnIndex) { //得到列名
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) { //判断表格是否可编辑
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {//设置rowIndex和columnIndex位置的值
}
@Override
public void addTableModelListener(TableModelListener l) {// 每当数据模型发生更改时,就将一个侦听器添加到被通知的列表中。
}
@Override
public void removeTableModelListener(TableModelListener l) {//每当数据模型发生更改时,就从被通知的列表中移除一个侦听器。
}
二、用一个类实现TableModel里面的方法
public class MyTableModel implements TableModel{
//当前的总列数
// public String[] columns_value;
//当前的总行数
public static String[][] rows_value; //这里设置成静态的,以便调用
public MyTableModel(int row, int column) {//从外部传入参数控制表格的行数和列数
rows_value = new String[row][column];
//通过for循环添加图片路径
//创建一个随机对象,实现随机的加载图片
Random ran = new Random();
for(int i=0;i<rows_value.length/2;i++){
for(int j=0;j<rows_value[i].length;j++){
int count = ran.nextInt(row)+1;
rows_value[i][j] = "images/"+count+".png";//将图片保存到二维数组里面
rows_value[rows_value.length/2+i][j] = "images/"+count+".png";
}
}
//打乱顺序
for(int i=0;i<rows_value.length;i++){//实现图片的随机放置
for(int j=0;j<rows_value[i].length;j++){
int a = ran.nextInt(row);
int b = ran.nextInt(row);
String temp = rows_value[i][j];
rows_value[i][j] = rows_value[a][b];
rows_value[a][b] =temp;
}
}
}
@Override
public int getRowCount() { //得到行数
return rows_value.length;
}
@Override
public int getColumnCount() { //得到列数
return rows_value[0].length;
}
@Override
public Class<?> getColumnClass(int columnIndex) { //得到要加载的对象类型
return javax.swing.ImageIcon.class;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) { // 得到每一行的元素
ImageIcon icon = new ImageIcon(rows_value[rowIndex][columnIndex]);
return icon;
}
@Override
public String getColumnName(int columnIndex) { //得到列名
return null;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) { //判断表格是否可编辑
// TODO Auto-generated method stub
return false;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {//设置rowIndex和columnIndex位置的值
// TODO Auto-generated method stub
}
@Override
public void addTableModelListener(TableModelListener l) {// 每当数据模型发生更改时,就将一个侦听器添加到被通知的列表中。
// TODO Auto-generated method stub
}
@Override
public void removeTableModelListener(TableModelListener l) {//每当数据模型发生更改时,就从被通知的列表中移除一个侦听器。
// TODO Auto-generated method stub
}<pre name="code" class="html">
}
实现JTable的是的制作
MyTableModel model = new MyTableModel(10, 10);
JTable table = new JTable(model);
this.add(table);//在当前的窗体或面板上添加table
二、通过DefaultTableModel实现JTable的制作
(1)、DefaultTableModel是默认的Table模型,它较TableModel接口更容易操作,只需要在构造方法里面传入数据加列名就能创建出表格的模型。
(2)、DefaultTableModel里面比较常用的构造方法
1、DefaultTableModel(Object[][] data, Object[] columnNames)
//构造一个 DefaultTableModel,并通过将 data 和 columnNames 传递到 setDataVector 方法来初始化该表。
2、DefaultTableModel(Vector data, Vector columnNames)
// 构造一个 DefaultTableModel,并通过将 data 和 columnNames 传递到 setDataVector 方法来初始化该表。
<span style="font-size:18px;">Vector<String> data = new Vector<String>();//一般用来存储表格里面要存储的数据
Vector<String> columnNames = new Vector<String>();//一般用来存储列名
DefaultTableModel model = new DefaultTableModel(data, columnNames);//定义表格模型相当于定义了表格的
JTable table = new JTable(model);//表格要做的事就是添加到窗体或面板上,当然表也有它自己的方法去实现特定的功能
frame.add(table);</span>