繁体   English   中英

编辑jTable后如何将数据存储到数组中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM