首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DefaultTableModel setValueAt抛出ArrayIndexOutOfboundsException

DefaultTableModel setValueAt抛出ArrayIndexOutOfboundsException
EN

Stack Overflow用户
提问于 2013-01-19 18:32:15
回答 2查看 1.5K关注 0票数 0

我的要求是在网格中显示StockQuote符号(流数据)。为此,我选择了JTable

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;

public class Preethi {

    protected void initUI() {
        final Random random = new Random();

        final DefaultTableModel model = new DefaultTableModel(new String[] { "Id", "Name", "Desg", "Sal" }, 0);
        final JTable table = new JTable(model);
        table.setFillsViewportHeight(true);
        JFrame frame = new JFrame(Preethi.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JScrollPane scrollpane = new JScrollPane(table);
        frame.add(scrollpane, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);

        Random ran = new Random(12);
        ran.nextFloat();

        String str = new String("sss");

        String[] socrates = {str, str, str };
        model.addRow(socrates);

        System.out.println(model.getRowCount());
        System.out.println(model.getColumnCount());

        model.setValueAt(new Object[]{"ewqeq","rtgre","gfdgd","mbmnb"}, 1, 4);
    }

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException,
            UnsupportedLookAndFeelException {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Preethi().initUI();
            }
        });
    }
}
EN

回答 2

Stack Overflow用户

发布于 2013-01-19 18:56:32

您不能设置不存在的行的值。

DefaultTableModel有一个addRow

正如Jon所提到的,您不应该对数据对象使用静态方法和字段

票数 1
EN

Stack Overflow用户

发布于 2013-01-19 19:13:22

代码语言:javascript
复制
model.setValueAt(new Object[]{"ewqeq","rtgre","gfdgd","mbmnb"}, 1, 4);

第一行不存在,因此您将按照MadProgrammer的建议获取ArrayIndexOutOfBoundsException.,使用addRow(..)方法并将您的对象传递给它。

示例:

代码语言:javascript
复制
model.addRow(new Object[]{"ewqeq","rtgre","gfdgd","mbmnb"});

更新:

您仅定义了4列,因此索引将从0到3。但您在setValueAt方法中指定了4。所以你的问题是一样的。将其更改为3。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14413393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档