我的jTable共有6列,分别是单选框(直接用的new Boolean(false)生成的),a(int型),b(double型),c(double型),d(date型),e(int型),括号内的是它们的class类型,我想当前面的单选框勾选中时,将3,4,5,6列作为另一个表格的行向量(rowVector),可是总是会出现一些异常~求大大们帮忙,部分代码如下:
if (jTable.isEditing())
if (!jTable.getCellEditor().stopCellEditing())
return; for (int i = 0; i < model.getRowCount(); i++)
{
if (model.getValueAt(i, 0).equals(new Boolean(true)))
{
sendRows = (Vector)rows.elementAt(i);
rowVector.addElement(sendRows);
}
}
}这样rowVector可以把选中的整行值取出,但我现在只要后4列,要怎么改?
我在sendRows = (Vector)rows.elementAt(i);下加了
for (int j = 0; j < 2; j++)
{
sendRows.remove(0);
}
但是会报ArrayIndexOutOfBoundsException:4>=4和
illegalArgumentException:cannot format given Object as a Number.
我还试了下如果只删除掉第一个的,直接sendRows.remove(0);
但是会报ArrayIndexOutOfBoundsException:5>=5和
ClassCastException:java.lang.Integer.
快郁闷死了,不知道怎么改,也不清楚为什么?
实在不行我就只能对表格进行操作了,先把取整行值的表格建起来,再把不要的列删除掉,不过还没试过不知道又会不会有问题~~~
if (jTable.isEditing())
if (!jTable.getCellEditor().stopCellEditing())
return; for (int i = 0; i < model.getRowCount(); i++)
{
if (model.getValueAt(i, 0).equals(new Boolean(true)))
{
sendRows = (Vector)rows.elementAt(i);
rowVector.addElement(sendRows);
}
}
}这样rowVector可以把选中的整行值取出,但我现在只要后4列,要怎么改?
我在sendRows = (Vector)rows.elementAt(i);下加了
for (int j = 0; j < 2; j++)
{
sendRows.remove(0);
}
但是会报ArrayIndexOutOfBoundsException:4>=4和
illegalArgumentException:cannot format given Object as a Number.
我还试了下如果只删除掉第一个的,直接sendRows.remove(0);
但是会报ArrayIndexOutOfBoundsException:5>=5和
ClassCastException:java.lang.Integer.
快郁闷死了,不知道怎么改,也不清楚为什么?
实在不行我就只能对表格进行操作了,先把取整行值的表格建起来,再把不要的列删除掉,不过还没试过不知道又会不会有问题~~~
解决方案 »
- void is an invald for the variable main问题
- 在比较Arraylist与Linkedlist插入元素效率时,竟然arraylist的速度比linkedlist速度要快!!!!!!求解!!!
- 解决了立马送分,顶也有,date2week的问题
- 请问Hashtable 是一个什么类呀!说的具体一些吧,谢谢了!
- 高分求解,JAVA怎样获得SQL生成的Xml格式行集?解决立即结帖!
- Swing裡面的Timer控件有時間限制嗎?
- 请问这个是什么
- 很简单的问题 有分啊:)
- 刚学,就是不懂一点小问题,不要见笑我,什么是面对对象?
- ant脚本怎么直接调用项目里某个类的main方法
- LDAP 与 JNDI 的关系?Jboss 是用的什么命名/目录服务?
- 谁帮我写个JAVA修改数据库的代码呀?()
再问下,我如果想再后来建成的表格的第一列加个f,先用sendmodel.addColumn("f");再用table.remove(4,0)建成的表格只是在view上改变了,是不是要加convertColumnIndexToModel()方法,要怎么写?
通常,做法是这样,首先建立好数据的结构,然后通知视图数据就绪,刷新显示。
你的model操作的应该是一个二维的链表。这个链表存储的是你显示时候用到的数据。所以,你要更改这个二维链表的结构或者数据,然后再去通知表格数据已经更改。通常你不需要告诉table去干掉一列或者一行,只要告诉它model的数据改变了。如果结构发生变化,比如列数更改,那么给这个table重新调用setModel或者fireTableStructureChanged。若是仅数据改变,可以fireTableDataChanged。如果你还知道究竟是哪行改变了,可fireTableRowsUpdated(int firstRow, int lastRow)等等等等。去看一下api文档,defaultTableModel里面。这些方法都是有用的。
不知道我说的你是否能够看明白?
DefaultTableModel sendmodel = new DefaultTableModel(send_row,send_col);
JTable sendTable = new JTable(sendmodel);
sendmodel.addColumn("f");
sendTable.moveColumn(4, 0);我知道接下来要通知table,怎么写?我写了:
for (int i = 0; i < 4; i++)
{
sendTable.convertColumnIndexToModel(i);
}
可是通过sendmodel.getValueAt(1,2)取出来的值和原来的一样,那说明model并没有更新啊,另外fireTableStructureChanged()不知道怎么写.
另外想问下,我如果是通过sendTable.getValueAt(1,2)的话,取出来的值就已经改变,是不是这样取是取视图上的数据,那我具体取值时只要通过sendTable.getValueAt()不就能取到视图上该位置的值么?那就不需要模型更新了?好像有点乱,不知道我这样问你看得明白么?
这样,你能不能把你的代码完整一些的给出?我就不自己全部重写了,直接修改你的。要连接数据库的话……我可能就没办法运行了,我机器上的数据库不能随便动。
建表是用DefaultTableModel()方法的,行向量send_row,列向量是send_col,我并没有对DefaultTableModel里的那些方法进行描述,像 getColumnCount,getColumnClass,getValueAt,setValueAt之类的,建表处的代码就是4楼所写的,很简单的,所以我现在是不是得把DefaultTableModel里的这些方法都写一遍,然后改写getValueAt()(setValueAt()呢?),如果是的话,你就简单帮我写下这里面的写法吧?谢谢~
DefaultTableModel sendmodel = new DefaultTableModel(send_row,send_col);
send_row是你的数据,send_col是列名列表。若你仅仅是想要增加一个列做显示倒是简单。send_row一定是一个二维结构。数组,链表,向量等等,而每个对象又是一个相同的结构。假设我称为record。for(Iterator it = rowVector.iterator(); it.hasNext();){
Vector v = (Vector)it.next();
Vector record = new vector();
record.add(String.valueOf(i + 1));
……//这里向record里面加你想要的其他东西
send_row.add(record);
}
//
DefaultTableModel sendmodel = new DefaultTableModel(send_row,send_col);
不过还是仔细研究一下那些方法比较好。即时你没有显示地改写那些方法,但是实际的操作流程和你改写是没有任何区别的。这些去百度一下,或者google一下,很多,有些说的很明白,其实本身也不复杂~~~
今天我就不罗嗦了~~呵呵,饿死了,下班了,吃饭去。