java表格控件JTable常用操作详解

来源:互联网 发布:人民币国际化知乎 编辑:程序博客网 时间:2024/06/01 08:33

JTable是Swing编程中很常用的控件,其为显示大块数据提供了一种简单的机制。JTable有很多东西是用于数据的生成和编辑,其中的很多东西还可以自定义,从而更进一步增强其功能。

这里总结了一些常用方法以备查阅.

一.创建表格控件的各种方式:
1) 构造一个默认的 JTable,使用默认的数据模型、默认的列模型和默认的选择模型对其进行初始化。
   JTable table = new JTable();
 2) 以表头和表数据创建表格.

    JTable(Object[][] rowData, Object[[] columnNames)

构造一个 JTable 来显示二维数组 rowData 中的值,其列名称为 columnNames.例如:创建一个两行两列的表格。
    Object[][] cellData = {{"row1-col1","row1-col2"},{"row2-col1",
    "row2-col2"}};
    String[] columnNames = {"col1","col2"};
    JTable table = new JTable(cellData, columnNames);
 3) 以表头和表数据创建表格,并且让表单元格不可改.
    String[] headers = { "表头一","表头二", "表头三"};
    Object[][] cellData = null;

DefaultTableModel model =new DefaultTableModel(cellData, headers) {

         publicboolean isCellEditable(int row, int column) {
           return false;
         }
    };

table = new JTable(model);

4)JTable(int numRows, int numColumns) 
          使用 DefaultTableModel 构造具有 numRows 行和 numColumns 列个空单元格的 JTable。

       JTable table = new JTable(3,4);创建3行4列表格

二.对表格列的控制
 1) 如果JTable的一个列或者JTable窗口自身的大小被重新确定,那么其他列会被相应的缩小或者放大,以适应新的窗口。使用setAutoResizeMode()方法就能够控制这种行为:
    table.setAutoResizeMode(int mode);

mode整数字段可能的值有:
AUTO_RESIZE_OFF
AUTO_RESIZE_NEXT_COLUMN
AUTO_RESIZE_SUBSEQUENT_COLUMNS
AUTO_RESIZE_LAST_COLUMN
AUTO_RESIZE_ALL_COLUMNS


 2) 限制某列的宽度.
    TableColumn firsetColumn =table.getColumnModel().getColumn(0);
    firsetColumn.setPreferredWidth(30);
    firsetColumn.setMaxWidth(30);
    firsetColumn.setMinWidth(30);
3) 设置当前列数.
   DefaultTableModel tableModel = (DefaultTableModel)table.getModel();
   int count=5;
   tableModel.setColumnCount(count);
4) 取得表格列数
   int cols = table.getColumnCount();
5) 添加列
   DefaultTableModel tableModel = (DefaultTableModel)table.getModel();
   tableModel.addColumn("新列名");
6) 删除列
   table.removeColumn(table.getColumnModel().getColumn(columnIndex));//columnIndex是要删除的列序号

三.对表格行的控制
1) 设置行高
   table.setRowHeight(intpixelHeight);

各个单元格的高度将等于行的高度减去行间的距离。
2) 设置当前行数
    DefaultTableModel tableModel = (DefaultTableModel)table.getModel();
    int n=5;
    tableModel.setRowCount(n);
3) 取得表格行数
     int rows = table.getRowCount();

4) 添加表格行
    DefaultTableModel tableModel = (DefaultTableModel)table.getModel();
    tableModel.addRow(new Object[]{"sitinspring","35", "Boss"});
5) 删除表格行
   DefaultTableModel tableModel = (DefaultTableModel)table.getModel();
   model.removeRow(rowIndex);// rowIndex是要删除的行序号

四.存取表格单元格的数据
 1) 取单元格数据
    DefaultTableModel tableModel = (DefaultTableModel)table.getModel();
    String cellValue=(String) tableModel.getValueAt(row,column);// 取单元格数据,row是行号,column是列号
2) 填充数据到表格.
   注:数据是Member类型的链表,Member类如下:
   public class Member{
       // 名称
       private String name;
       // 年龄
        private String age;
        // 职务
        private String title;
     }

填充数据的代码:
public void fillTable(List<Member> members){
    DefaultTableModel tableModel = (DefaultTableModel)table.getModel();
    tableModel.setRowCount(0);// 清除原有行
             
    // 填充数据
    for(Member member:members){
        String[] arr=new String[3];
        arr[0]=member.getName();
        arr[1]=member.getAge();
        arr[2]=member.getTitle();
               
        // 添加数据到表格
        tableModel.addRow(arr);
    }
    // 更新表格
    table.invalidate();
}
2) 取得表格中的数据
public List<Member> getShowMembers(){
    List<Member> members=newArrayList<Member>();
    DefaultTableModel tableModel = (DefaultTableModel)table
  .getModel();
   int rowCount=tableModel.getRowCount();
   for(int i=0;i<rowCount;i++){
       Member member=new Member();
       member.setName((String)tableModel.getValueAt(i,0));

// 取得第i行第一列的数据
       member.setAge((String)tableModel.getValueAt(i,1));

// 取得第i行第二列的数据
      member.setTitle((String)tableModel.getValueAt(i,2));

// 取得第i行第三列的数据
       members.add(member);
    }
    return members;
}

五.取得用户所选的行
1) 取得用户所选的单行
int selectRows=table.getSelectedRows().length;// 取得用户所选行的行数
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();

if(selectRows==1){
     int selectedRowIndex = table.getSelectedRow();

// 取得用户所选单行
 // 进行相关处理
  }
 2) 取得用户所选的多行
 int selectRows=table.getSelectedRows().length;

// 取得用户所选行的行数
 DefaultTableModel tableModel = (DefaultTableModel) table.getModel();

 if(selectRows>1)
     int[] selRowIndexs=table.getSelectedRows();// 用户所选行的序列
     for(int i=0;i<selRowIndexs.length;i++){
         // 用tableModel.getValueAt(row, column)取单元格数据
         String cellValue=(String)tableModel.getValueAt(i, 1);
      }
  }
 六.添加表格的事件处理
 view.getTable().addMouseListener(new MouseListener() {
       public void mousePressed(MouseEvente) {
        // 鼠标按下时的处理
       }

publicvoid mouseReleased(MouseEvent e) {
       // 鼠标松开时的处理
       }

 publicvoid mouseEntered(MouseEvent e) {
       // 鼠标进入表格时的处理
       }

 publicvoid mouseExited(MouseEvent e) {
       // 鼠标退出表格时的处理
       }

publicvoid mouseClicked(MouseEvent e) {
       // 鼠标点击时的处理
       }
});

例子:

点击打开链接

这里我要讲下JTable的结构 a[][]就是一个i行j列的表,用来显示数据库中数据用的,而header[]是一个j列的表头,用来存储字段名称的,比如说上面的"学号","姓名"等字符串;


0 0
原创粉丝点击