一、在用JTable构造方法创建一个JTable时如果没有指定TableModel,那么会构造方法内部默认创建一个DefalutTableModel
使用table的getModel()方法可以获得一个TableModel对象,需要指出的是TableModel是一个接口,不能直接使用。
TableModel有两个子类AbstractTableModel和DefaultTableModel
二、每一个table对象都会使用一个TableModel对象来管理表中的数据
三、DefaultTableModel有一个方法addRow有两种重载形式,用于向表中追加一行数据
addRow(Vector rowData)
addRow(Object[] rowData)
需要说明的是在使用此方法时要注意JTable自身的TableModel必须和用addRow方法的DefaultTableModel引用一致
一個使用DefaultTableModel的例子
package test;
import java.awt.Container;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableColumn;
public class AddRemoveCells implements ActionListener{
JTable table = null;
DefaultTableModel defaultModel = null;
public AddRemoveCells(){
JFrame frame = new JFrame();
String[] name = {"字段1","字段2","字段3","字段4","字段5"};
String[][] data = new String[5][5];
int value = 1;
for(int i=0;i<data.length;i++){
for(int j=0;j<data[i].length;j++){
data[i][j] = String.valueOf(value++);
}
}
defaultModel = new DefaultTableModel(data,name);//加入數據和字段名構造tablemodel
table = new JTable(defaultModel);//設置表格模式為DefaultTableModel
table.setPreferredScrollableViewportSize(new Dimension(400,80));
JScrollPane s = new JScrollPane(table);
JPanel panel = new JPanel();
JButton b = new JButton("增加列");
b.addActionListener(this);
panel.add(b);
b = new JButton("增加行");
b.addActionListener(this);
panel.add(b);
b = new JButton("刪除列");
b.addActionListener(this);
panel.add(b);
b = new JButton("刪除行");
b.addActionListener(this);
panel.add(b);
Container contentPane = frame.getContentPane();
contentPane.add(panel,BorderLayout.NORTH);
contentPane.add(s,BorderLayout.SOUTH);
frame.setTitle("AddRemoveCells");
frame.pack();
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("增加列")){
defaultModel.addColumn("增加列");
}
if(e.getActionCommand().equals("增加行")){
defaultModel.addRow(new Vector());
}
if(e.getActionCommand().equals("刪除列")){//columnCount>=0說明表格中還有列,此時還可以繼續操作。
int columnCount = defaultModel.getColumnCount()-1;
if(columnCount>=0){
TableColumnModel columnModel = table.getColumnModel();
//拿到要刪除的列
TableColumn tableColumn = columnModel.getColumn(columnCount);
columnModel.removeColumn(tableColumn);
//刪除完畢后設置列數
defaultModel.setColumnCount(columnCount);
}
//相反,如果columnCount小于0,則表示此時表個已經沒有列,就不能再刪了,因此我們什么也不做
}
if(e.getActionCommand().equals("刪除行")){
//使用getRowCount()方法可以返回行數
int rowCount = defaultModel.getRowCount()-1;
if(rowCount>=0){
//刪除當前最后一行
defaultModel.removeRow(rowCount);
//設置當前表格的行數
defaultModel.setRowCount(rowCount);
}
}
table.revalidate();
}
public static void main(String[] args){
new AddRemoveCells();
}
}