JTable 的用法小结

来源:互联网 发布:js 点击按钮执行函数 编辑:程序博客网 时间:2024/05/19 11:47
 JTable 将数据存储和处理的任务委托给它的表格数据模型,表格数据模型必须实现TableModel接口,该接口定义许多方法,注册表格模型监听器,管理单元格以及获得行数,列数以及列名等。

    AbstractTableModel 类 对 TableModel 接口中大部分方法提供部分实现,它关注监听器的管理,并为生成TableModeEvents 事件,以及把他们发送到监听器提供方便,要创建一个TableModel,可以简单扩展AbstractTableModel类并且至少实现下列三个方法

public int getRowCount()

public int getColumnCount()

public Object getValueAt(int row,int column)

DefaultTableModel 类 扩展 AbstractTableModel 类并实现这三个方法,此外DefaultTableModel 提供数据的具体存储,数据存在向量里,向量的元素是对象数组,每个元素代表一个独立单元格的值。

对表格内的数据动态添加删除用DefaultTableModel类方法实现

DefaultTableModel tableModel = new DefaultTableModel(.....);

tableModel.addRow(...);

tableModel.insertRow(...);

tableModel.removeRow(1);

tableModel.addColumn("columnName");

tableModel.setValueAt(value,int row,int column);

表格类型TableModel 管理表格数据通过TableModel能添加和删除行,也能添加一列,但是,不能通过TableModel删除列,为了从JTable中删除列,必须使用表格列模型。

1. 表格列模型管理表格的列,能够用来选择添加,移动和删除表格的列

2. 表格列模型必须实现TableColumnModel接口

 

DefaultTableColumnModel 是实现TableColumnModel和PropertyChangeListener的一个具体类。

 

以下给出例子代码可以帮助理解:

例1:静态表格

import javax.swing.JTable;
import javax.swing.JApplet;
import javax.swing.JScrollPane;

public class TestTable extends JApplet
{
 //create table column names
 String[] columnNames = {"Country","Capital","Population in Millions","Democracy"};
    //Create table data
 Object[][] data= {
   {"USA","Washington DC",280,true},
   {"Canada","Ottawa",32,true},
   {"United Kingdom","London",60,true},
   {"Germany","Berlin",83,true},
   {"France","Paris",60,true},
   {"Norway","Oslo",4.5,true},
   {"India","new Deli",1046,true}
 };
 
 //Create a table
 JTable jtable1 = new JTable(data,columnNames);
 
 public void init()
 {
  add(new JScrollPane(jtable1));
 }
 
}

 

 

例2:表格模型

import java.awt.BorderLayout;

import javax.swing.JApplet;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;


public class TestTableModel extends JApplet
{
    //create table column names
 String[] columnNames={"Country","Captial","Population in Millions","Democracy"};
 
 //create table data
 Object[][]data= {
   {"USA","Washington DC",280,true},
   {"Canada","Ottawa",32,true},
 };
  
 //create a TableModel
 DefaultTableModel tableModel1 = new DefaultTableModel(data,columnNames);
 
 
 //create a ColumnModel
 DefaultTableColumnModel columnModel = new DefaultTableColumnModel();
 
 //create a table
 JTable jTable1 = new JTable(tableModel1);
 
 public void init()
 {
  super.setLayout(new BorderLayout());
  this.add(new JScrollPane(jTable1));
  
  tableModel1.addRow(new Object[]{"France","Paris",60,true});
  tableModel1.addRow(new Object[]{});
  tableModel1.insertRow(0, new Object[]{"India" , "New Delhi" , 1046, true});
  tableModel1.removeRow(1);
  tableModel1.addColumn("Area");
  tableModel1.setValueAt(10, 0, 4);
  tableModel1.setValueAt(20,1,4);
  tableModel1.setValueAt(30,2,4);
  
  TableColumnModel columnModel=jTable1.getColumnModel();
  
  columnModel.removeColumn(columnModel.getColumn(4));
  
  int columnCount = tableModel1.getColumnCount();
  int rowCount = tableModel1.getRowCount();
  System.out.println("columnCount ="+columnCount);
  System.out.println("rowCount = "+rowCount);
  int x=0,y=0;
  String value = (String)tableModel1.getValueAt(x, y);
  System.out.println("value = "+ value+" , x="+x+" ,y="+y);
 }
}

 

例3 :表格列模型

import javax.swing.JApplet;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.table.TableColumnModel;

import java.awt.BorderLayout;

public class TestTableColumnModel extends JApplet
{
    //create table column names
 String [] columnNames = {"Country","Capital","Population in Millions","Democracy"};
 
 //create table data
 Object [][] data={
   {"USA","Washington DC",32,true},
   {"Canada","Ottawa",32,true}
 };
 
 //create a table
 JTable jt =  new JTable(data,columnNames);
 
 public void init()
 {
  setLayout(new BorderLayout());
  add(new JScrollPane(jt));
  
  TableColumnModel columnMode1 = jt.getColumnModel();
        columnMode1.removeColumn(columnMode1.getColumn(3));
        columnMode1.moveColumn(0, 1);
 }
}