![](/img/trans.png)
[英]How can i save the data from the cell after editing in jTable(autosave)?
[英]How to store data into array after editing jTable
我正在开发程序。 在此程序中,我想让用户编辑jtable
(表有两列,用户将数据输入第二列)。 之后,我想将编辑后的数据存储到整数类型数组中(在这种情况下,我只想存储第二列数据)。
getvalue
按钮代码如下所示。
private void btntablesubmitMouseClicked(java.awt.event.MouseEvent evt) {
DefaultTableModel model = new DefaultTableModel();
int[] btime = new int[this.noofprocess];
tablebursttime.getModel();
for(int i=1; i <=this.noofprocess;i++){
btime[i] = Integer.parseInt( model.getValueAt(i,1).toString() );
System.out.println(btime[i]);
}
}
当我使用上面的代码运行该程序时,会出现一些错误。
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 0
at java.util.Vector.elementAt(Vector.java:474)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:648)
at roundrobin.RoundRobinAlgorithm.btntablesubmitMouseClicked(RoundRobinAlgorithm.java:579)
at roundrobin.RoundRobinAlgorithm.access$1000(RoundRobinAlgorithm.java:17)
at roundrobin.RoundRobinAlgorithm$10.mouseClicked(RoundRobinAlgorithm.java:363)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
at java.awt.Component.processMouseEvent(Component.java:6536)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2237)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2295)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4889)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4467)
at java.awt.Container.dispatchEventImpl(Container.java:2281)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
如何防止此错误?
将for(int i=1; i <=this.noofprocess;i++){
更改for(int i=0; i <this.noofprocess;i++){
,原因是索引基于0
并且集合的大小从1
开始。
您的例外来自这里
Integer.parseInt( model.getValueAt(i,2).toString() );
尝试如下更改模型对象的创建
DefaultTableModel model = (DefaultTableModel) tablebursttime.getModel();
更新
尝试这个
private void btntablesubmitMouseClicked(java.awt.event.MouseEvent evt) {
DefaultTableModel model = (DefaultTableModel) tablebursttime.getModel();
int[] btime = new int[this.noofprocess];
for(int i=0; i <this.noofprocess;i++){
btime[i] = Integer.parseInt( model.getValueAt(i+1,1).toString() );
System.out.println(btime[i]);
}
}
for(int i=0; i <this.noofprocess;i++){
btime[i] = Integer.parseInt( model.getValueAt(i,1).toString() );
System.out.println(btime[i]);
}
2列不存在(i,2)的值
您对JTable
的模型不做任何事情,将会得到ArrayIndexOutOfBoundsException
。 尝试这个:
private void btntablesubmitMouseClicked(java.awt.event.MouseEvent evt) {
TableModel model = tablebursttime.getModel();
int[] btime = new int[this.noofprocess];
for(int i=1; i <=this.noofprocess;i++){
btime[i-1] = Integer.parseInt( model.getValueAt(i,1).toString() );
System.out.println(btime[i-1]);
}
}
您对model
初始化也是导致错误的原因。 您应该使用DefaultTableModel model = (DefaultTableModel)tablebursttime.getModel()
。 您还可以添加stopCellEditing()
来防止在第2列的最后一个单元格具有焦点时可能的nullReference。
tablebursttime.getCellEditor().stopCellEditing();
DefaultTableModel model = (DefaultTableModel)tablebursttime.getModel();
int[] btime = new int[this.noofprocess];
for(int i=0; i <this.noofprocess;i++){
btime[i] = Integer.parseInt(model.getValueAt(i,1).toString() );
System.out.println(btime[i]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.