Java中DefaultTableModel的用法

  • 格式:doc
  • 大小:53.50 KB
  • 文档页数:4

我们曾提到过DefaultTableModel类,并说明了此类是继承AbstractTableModel 抽象类而来,且实现了getColumnCount(),getRowCount()与getValueAt()3
个方法。

因此在实际的使用上,DefaultTableModel比AbstractTableModel要来得简单许多,也较常被拿来使用DefaultTableModel内部使用Vector来使用表格的数据,若佻所要显示的表格格式是比较单纯的变化,笔者建议使用DefaultTableModel类会来得方便也简单许多。

若佻所要显示的数据模式非常复杂,
例如我们所举的成绩表格外加学生选课信息等,像这类的表格通常显示的信息会因人面异,因此使用AbstractTableModel会比较容易设计些。

下面是DefaultTableModel的构造函数:
DefaultTableModel():建立一个DefaultTableModel,里面没有任何数据. DefaultTableModel(int numRows,int numColumns):建立一个指定行列数的DefaultTableModel.
DefaultTableModel(Object[][] data,Object[] columnNames):
建立一个DefaultTableModel输入数据格式为Object Array.系统会自动调用setDataVector()方法来设置数据。

DefaultTableModel(Object[] columnNames,int numRows):建立一个DefaultTableModel,并具有Column Header名称与行数信息。

DefaultTableModel(Vector columnNames,int numRows):
建立一个DefaultTableModel,并具有column Header名称与行数信息。

DefaultTableModel(Vector data,Vector columnNames):
建立一个DefaultTableModel,输入数据格式为Vector.系统会自动调用setDataVector()方法来设置数据。

DefaultTableModel类提供相当多好用的方法,如之前我们谈论过的getColumnCount(),getRowCount(),getValueAt(),isCellEditable() setValueAt()等方法,均可直接使用。

且DefaultTableModel也提供了addColumn()与addRow()等方法,可让我们随时增加表格的数据。

下面我们就举一个动态增加表格字段的例子:
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class AddRemoveCells implements ActionListener
{
JTable table = null;
DefaultTableModel defaultModel = null;
public AddRemoveCells()
{
JFrame f = 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.length j++)
data[j] = String.valueOf(value++);
}
defaultModel = new DefaultTableModel(data,name);
table=new JTable(defaultModel);
table.setPreferredScrollableViewportSize(new Dimension(400, 80));
JScrollPane s = new JScrollPane(table);
JPanel panel = new JPanel();
JButton b = new JButton("增加行");
panel.add(b);
b.addActionListener(this);
b = new JButton("增加列");
panel.add(b);
b.addActionListener(this);
b = new JButton("删除行");
panel.add(b);
b.addActionListener(this);
b = new JButton("删除列");
panel.add(b);
b.addActionListener(this);
Container contentPane = f.getContentPane();
contentPane.add(panel, BorderLayout.NORTH);
contentPane.add(s, BorderLayout.CENTER);
f.setTitle("AddRemoveCells");
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
/*要删除列必须使用TableColumnModel界面定义的removeColumn()方法。

*
因此我闪先由JTable类的getColumnModel()方法取*TableColumnModel对象,再由
TableColumnModel的getColumn() *
方法取得要删除列的TableColumn.此TableColumn对象当作是*removeColumn()的参数。

删除此列完毕后必须重新设置列数,*也就是使用DefaultTableModel 的setColumnCount()方法来设置。

*/
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("增加列"))
defaultModel.addColumn("增加列");
if(e.getActionCommand().equals("增加行"))
defaultModel.addRow(new Vector());
if(e.getActionCommand().equals("删除列"))
{
int columncount = defaultModel.getColumnCount()-1;
if(columncount >= 0)//若columncount<0代表已经没有任何列了。

{
TableColumnModel columnModel = table.getColumnModel(); TableColumn tableColumn = columnModel.getColumn(columncount); columnModel.removeColumn(tableColumn);
defaultModel.setColumnCount(columncount);
}
}
if(e.getActionCommand().equals("删除行"))
{
int rowcount = defaultModel.getRowCount()-1;
//getRowCount
返回行数,
rowcount<0
代表已经没有任何行了。

if(rowcount >= 0)
{
defaultModel.removeRow(rowcount);
defaultModel.setRowCount(rowcount);
//删除行比较简单,只要用DefaultTableModel的removeRow()方法即可。

删除
//行完毕后必须重新设置列数,也就是使用DefaultTableModel的setRowCount()方法来设置。

}
}
table.revalidate();
}
public static void main(String args[]) {
new AddRemoveCells();
}
}。