LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 888|回复: 2

小论SWING中JTable中的加行的解决办法(初学JAVA,讲的不对的地方请大家指点)

[复制链接]
发表于 2004-12-29 15:02:58 | 显示全部楼层 |阅读模式
学习中用到swing中的JTable,
写代码中发现根本没有方法可为其进行加行的方法(也有可能不知道 :ask )
研究了一下由netbeans中自动生成的代码,于是就自行写一种方式。
在NETBEANS中画出了JTable,并为其加入了相关属性,查看自动生成的初始代码如下:
        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.Integer.class, java.lang.String.class, java.lang.String.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
上面代码我足足看了一个小时才分析出它所用的方法(MVC模式),感觉想是又回到MFC的时代(到处是又臭又长的宏),由于行列的使用Object二维数据组生成的,所以只有去自行写个DefaultTableModel的类并在新增行时变化重新变化那个Object的二维数组来完成,另外由于希望在窗体内进行相关操作,就申明一个内部类,代码如下:
    private Object[][] ob=null;
    private class MyModel extends javax.swing.table.DefaultTableModel
        {
        public MyModel(Object[][]ob)
            {
            super(ob,new String[]{
                "Title 1", "Title 2", "Title 3", "Title 4"
            });
            
            }
        Class[] types = new Class [] {
                java.lang.Integer.class,
                java.lang.Integer.class,
                java.lang.String.class,
                java.lang.String.class
            };
        };
     private int rowCount=1;
     private final int colCount=4;
     private MyModel mymodel=null;//这里由于考虑变化没有用匿名类

初始化是放入自行写的model
        mymodel=new MyModel(ob=new Object[rowCount][colCount]);
        this.jTable1.setModel(mymodel);

好了准备工作做好,再来做行增加
        rowCount=rowCount+1;
        javax.swing.table.TableModel tm=jTable1.getModel();
        ob=new Object[rowCount][colCount];
        //还需把原有数据导进新ob中
        for(int i=0;i<ob.length-1;i++)
            for(int j=0;j<ob[0].length;j++)
                ob[j]=tm.getValueAt(i,j);
        mymodel=new MyModel(ob);
        jTable1.setModel(mymodel);

总结:感到swing为做到mvc,提高了代码的难度真是值得吗?

注:非转帖。
发表于 2004-12-30 07:01:52 | 显示全部楼层
顶一下
不知道有没有更简单的方法。
 楼主| 发表于 2004-12-30 21:37:24 | 显示全部楼层
今天又找了一下,还没找到,真希望能有更简单的方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表