Java GUI 中的JTable-Netbeans设置

来源:互联网 发布:淘宝推广教程 编辑:程序博客网 时间:2024/05/15 11:11

Swing颇受欢迎的JTable类为显示大块数据提供了一种简单的机制。JTable有很多东西是用于数据的生成和编辑,其中的很多东西还可以自定义,从而更进一步增强其功能。本文会引导你一步步地进入JTable的世界。

  Listing A包含了一个简单示例的代码,这个示例会说明常用JTable的行为。用户能够更改JTable的布局、拖放它的栏,或者通过拖动标题的分隔线来改变其大小。

  这些列被保存在一个String数组里:

  String[] columnNames = {"Product","Number of Boxes","Price"};

  数据被初始化并保存在一个二维的对象数组里:

  Object[][] data =

  {

  {"Apples", new Integer(5),"5.00"},

  {"Oranges", new Integer(3),"6.00"},

  {"Pears", new Integer(2),"4.00"},

  {"Grapes", new Integer(3),"2.00"},

  };

  JTable是使用data和columnNames构成的:

  JTable table = new JTable(data, columnNames);
Netbeans 中可以设置Model 的模式,在JTable 中右键选择“表内容”,在表模型中可以选择“用户指定的”或者是“定制代码”,选择第一个就可以在行中输入第一行字段,也就是表的标题,在列标签里可以指定表的列数。
根据用户的设置,生成的代码:

TableInfo.setModel(new javax.swing.table.DefaultTableModel(            new Object [][] {                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null},                {null, null, null, null, null, null, null, null, null, null, null, null, null}    },            new String [] {                "学号", "姓名", "出生年月", "性别", "学校", "地址", "学院", "专业", "手机号码", "班级", "Email", "QQ号", "备注"            }        ) {            Class[] types = new Class [] {                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class            };            boolean[] canEdit = new boolean [] {                false, false, false, false, false, false, false, false, false, false, false, false, false            };            public Class getColumnClass(int columnIndex) {                return types [columnIndex];            }            public boolean isCellEditable(int rowIndex, int columnIndex) {                return canEdit [columnIndex];            }        });             

生成的表的样式是:
这种方式在向表中添加字段的时候只能用setValueAt(Object aValue, int row,int column)

TableModel model=this.TableInfo.getModel();            for(int i=0;i<row;i++)            {                model.setValueAt(str[i+1][1],i,0);                model.setValueAt(str[i+1][2],i,1);                model.setValueAt(str[i+1][3]+str[i+1][4],i,2);                model.setValueAt(str[i+1][5],i,3);                model.setValueAt(str[i+1][6],i,4);                model.setValueAt(str[i+1][7],i,5);                model.setValueAt(str[i+1][8],i,6);                model.setValueAt(str[i+1][9],i,7);                model.setValueAt(str[i+1][10],i,8);                model.setValueAt(str[i+1][11],i,9);                model.setValueAt(str[i+1][12],i,10);                model.setValueAt(str[i+1][13],i,11);                model.setValueAt(str[i+1][14],i,12);            }
比较容易出的问题是在删除表中的某一项时,上面初始化的创建的行数并不一定都会被填满值,所以用函数.getRowCount()获得的行数是所有的行包括NULL值得,这样就会产生“空指针的错误”,在操作前要先判断。
第二种方式选择用户定制的代码,在右键-属性的代码标签中在-"初始化前代码"中加入 调用的是DefaultTableModel类
Tbmodel1 = new javax.swing.table.DefaultTableModel(    new Object [][]{    },    new String [] {        "ID", "PA"    });
在“初始化后代码”中加入(patternTable 是表名称)
patternTable.setColumnSelectionAllowed(false);patternTable.setCellSelectionEnabled(false);patternTable.setRowSelectionAllowed(true);patternTable.setShowGrid(true);patternTable.setShowHorizontalLines(true);patternTable.setShowVerticalLines(true);

生成的表的样式是:

生成的表示没有行线和列线的,这个表中现在还没有字段,插入一行内容就会多一行,不会出现行中没有值得情况,可以调用DefaultTableModel中的

 addRow(Object[] rowData)函数来插入一行信息。而且这种方式在删除记录的时候不会出现空指针的情况,但是就外观来说,没有行线