java - 将行添加到 JTable 时出错

标签 java arrays swing jtable defaulttablemodel

我有一个 JButton,一旦按下它,就会在 JTable 中添加一行。我试图通过实现以下代码来做到这一点。

columNames = new Vector<>();
columNames.addElement("Name");
columNames.addElement("CC");
columNames.addElement("Age");
columNames.addElement("PhoneNumber");
columNames.addElement("Date");
columNames.addElement("Amount$");

Object[] dataList = {"name", "cc", "age", "phone", "date", "amount"};

data = new DefaultTableModel(columNames, 0);
data.addRow(dataList);

table = new JTable(data);
JScrollPane scrollTable = new JScrollPane(table);
scrollTable.setBounds(22, 78, 764, 177);
scrollTable.setViewportView(table);

//ActionListener method!.

if(e.getActionCommand().equals("Add client"))
{
    Object[] dataList = {"name", "cc", "age", "phone", "date", "amount"};
    data.addRow(dataList);

    DefaultTableModel defaut = (DefaultTableModel) table.getModel();
    defaut.addRow(dataList);
}

它抛出 Exception in thread "AWT-EventQueue-0"java.lang.ArrayIndexOutOfBoundsException:-1

我该如何解决?

最佳答案

如以下完整示例所示,您的片段似乎可以正常工作。该示例可以帮助您隔离完整代码中的问题。此外,

image

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.util.Vector;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 * @see https://stackoverflow.com/a/38926460/230513
 */
public class Test {

    private final Object[] dataList = {"name", "cc", "age", "phone", "date", "amount"};

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Vector columNames = new Vector<>();
        columNames.addElement("Name");
        columNames.addElement("CC");
        columNames.addElement("Age");
        columNames.addElement("Phone");
        columNames.addElement("Date");
        columNames.addElement("Amount$");
        DefaultTableModel data = new DefaultTableModel(columNames, 0);
        data.addRow(dataList);
        JTable table = new JTable(data);
        JScrollPane scrollTable = new JScrollPane(table);
        scrollTable.setViewportView(table);
        f.add(new JScrollPane(table));
        f.add(new JButton(new AbstractAction("Add") {
            @Override
            public void actionPerformed(ActionEvent e) {
                data.addRow(dataList);
            }
        }), BorderLayout.PAGE_END);

        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Test()::display);
    }
}

关于java - 将行添加到 JTable 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38926148/

相关文章:

java - 存储字符串列表的最佳方式

php - 从 PHP 5.3 中的数组中读取最长的字符串

java - 将 JPanel 构造函数添加到 JPanel 显示灰色

java - 在 JTextPane 上显示 Excel 工作表的格式化单元格值

java - 我可以将从另一个 Controller 获取的参数用于当前的可初始化参数吗?

java - Vaadin 中的多个 View 类

java - 在 Firebase (Android) 中同时更新多个节点中的多个字段

java - Spring WebFlow - 休息映射问题

c++ - 将用户输入的空间存储在 char 数组中

java - 为 DefaultTableModel 创建 vector