javax.swing.jtalbe可谓是操作数据库的时候最长使用的组件了,在末尾加入一个新列API中都能找到,但是根据使用的需求和对当列值的操作可能需要在任意位置插入一个新的column,并且实时改变每个column的索引这样才能确保数据的正确
java api中没有提供在任意位置插入列的函数,但是我们可以在末尾加入列后使用DefaultTableColumnModel的
moveColumn(column1,column2)将column1移动到column2的位置.其他的列向后或前移动另外JTable中就提供了这个函数但是功能不一样,JTable中移动只是对视图进行了移动但是列的索引没有跟着改变
以下用代码做测试:
插入前表头(只截取后面部分):
以下代码为在tk,jk,vk,TK,VK,JK后加入新的一列列名为其列名+点号
public void accessStrength() {
getTheStrengthBytype("vk", vk_weak, vk_middle);
getTheStrengthBytype("jk", jk_weak, jk_middle);
getTheStrengthBytype("tk", tk_weak, tk_middle);
getTheStrengthBytype("VK", vk_weak, vk_middle);
getTheStrengthBytype("JK", jk_weak, jk_middle);
getTheStrengthBytype("TK", tk_weak, tk_middle);
updateTheui("vk");//加完需要的列后逐个进行移动
updateTheui("jk");
updateTheui("tk");
updateTheui("VK");
updateTheui("JK");
updateTheui("TK");
}
public void updateTheui(String columnname)
{
int columnindex = -1;
int sindex = -1;
try {
columnindex = ((DefaultTableColumnModel) lefttable.getColumnModel())
.getColumnIndex(columnname);
} catch (IllegalArgumentException e) {
}
try {
sindex = ((DefaultTableColumnModel) lefttable.getColumnModel())
.getColumnIndex(columnname + "・");
} catch (IllegalArgumentException e) {
}
if(columnindex!=-1&&sindex!=-1)
((DefaultTableColumnModel) lefttable.getColumnModel()).moveColumn(
sindex,
columnindex + 1 <= lefttable.getColumnCount() ? columnindex + 1
: columnindex);
}
public boolean getTheStrengthBytype(String columnname, double weak,
double middle) {
boolean rs = true;
int columnindex = -1;
int sindex = -1;
try {
columnindex = ((DefaultTableColumnModel) lefttable.getColumnModel())
.getColumnIndex(columnname);
} catch (IllegalArgumentException e) {
JOptionPane
.showMessageDialog(null, "文件类型错误:找不到需要计算的列" + columnname);
return rs;
}
try {
sindex = ((DefaultTableColumnModel) lefttable.getColumnModel())
.getColumnIndex(columnname + "・");
} catch (IllegalArgumentException e) {
}
if (sindex == -1) {
((DefaultTableModel) lefttable.getModel()).addColumn(columnname
+ "・");
sindex = lefttable.getColumnCount() - 1;
}
}
运行结果如下
如果在每加入一列后就进行移动,代码为
updateTheui("vk");//加完需要的列后逐个进行移动
updateTheui("jk");
updateTheui("tk");
updateTheui("VK");
updateTheui("JK");
updateTheui("TK");
这部分去掉并在getTheStrengthBytype方法后加上
updateTheui(columnname);
运行结果如下: