|
学习中用到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,提高了代码的难度真是值得吗?
注:非转帖。 |
|