Java GUI 中的JTable-Netbeans设置

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)函数来插入一行信息。而且这种方式在删除记录的时候不会出现空指针的情况,但是就外观来说,没有行线

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值