【问题标题】:Get content of selected rows from JTable as ArrayList of Objects从 JTable 中获取选定行的内容作为对象的 ArrayList
【发布时间】:2015-05-06 12:53:45
【问题描述】:

我想将选定行的内容收集到 Object 类型的数组中。要收集所有选定行的内容,应将这些数组添加到稍后返回的数组列表中。

简化方法:

Content of row --> Object[i] = content of column 1...2...3...i
ArrayList<Object[]> add <-- Object[]

ArrayList 应该是这样的:

list {

[(content of row(0), col(0)), content of row(0), col(1)), content of row(0), col(1))],

[(content of row(1), col(0)), content of row(1), col(1)), content of row(1), col(1))]


[(content of row(2), col(0)), content of row(2), col(1)), content of row(2), col(1))]

} 

在下面你会发现我到目前为止的代码,但这不能正常工作,我得到空指针异常。

public static ArrayList<Object[]> getSelectedTaskAsList() {
    ArrayList<Object[]> tasks = new ArrayList<Object[]>();

    if (table.getSelectedRowCount() > 0) { // check if there are selected rows
        int[] selectedRows = table.getSelectedRows();
        Object[] taskAsArray = null;
        for (int i = 0; i < selectedRows.length; i++) { // print all selected tasks
            for (int j = 0; j < table.getColumnCount(); j++) {
                taskAsArray[j] = (table.getValueAt(table.convertRowIndexToModel(selectedRows[i]),table.convertColumnIndexToModel(j)));
            }
            tasks.add(taskAsArray);
        }
    }
    return tasks;
}

首先,我想知道我的方法是“好”还是太难了,或者是否有其他方法。将表中的第一个值添加到taskAsArray[] 数组时发生空指针异常。

【问题讨论】:

  • 如果您需要更多信息,请告诉我,我想让这个尽可能简单。
  • 我不知道Simplyfied方法是否是个好主意,你很清楚你为......做什么,只是避免简单回答相当空洞的问题
  • NPE 是错误设计或代码的简单输出
  • @mKorbel 你可能是对的,但我不确定我的问题是否足够清楚,因为这只是一个更大项目的一些摘录代码,所以我想解释我的“需求”,就像这样容易理解可能。
  • 但这将包括没有选择行的情况,这将导致崩溃。如果选择了至少一个行,我只想运行它。

标签: java arrays swing arraylist jtable


【解决方案1】:

您应该始终指出您获得异常的位置。但首先你应该改变它

    Object[] taskAsArray = null;
    for (int i = 0; i < selectedRows.length; i++) { // print all selected tasks
        for (int j = 0; j < table.getColumnCount(); j++) {
            taskAsArray[j] = (table.getValueAt(table.convertRowIndexToModel(selectedRows[i]),table.convertColumnIndexToModel(j)));
        }
        tasks.add(taskAsArray);
    }

进入

    Object[] taskAsArray = new Object[table.getColumnCount()];
    for (int i = 0; i < selectedRows.length; i++) { // print all selected tasks
        for (int j = 0; j < table.getColumnCount(); j++) {
            taskAsArray[j] = (table.getValueAt(table.convertRowIndexToModel(selectedRows[i]),table.convertColumnIndexToModel(j)));
        }
        tasks.add(taskAsArray);
    }

【讨论】:

  • 谢谢,我会在以后的问题中添加这个。
【解决方案2】:

把你的代码改成

    Object[] taskAsArray = null;
    for (int i = 0; i < selectedRows.length; i++) { // print all selected tasks
        taskAsArray=new Object[table.getColumnCount()]; //<--- the added array init
        for (int j = 0; j < table.getColumnCount(); j++) {
            taskAsArray[j] = (table.getValueAt(table.convertRowIndexToModel(selectedRows[i]),table.convertColumnIndexToModel(j)));
        }
        tasks.add(taskAsArray);
    }

【讨论】:

    【解决方案3】:

    taskArray 未正确声明。此外,如果我正确理解您的描述,您应该为每个选定的行创建一个 Object 数组。

    将声明更改为:

    Object[] taskArray = new Object[table.getColumnCount()];
    

    并将其移动到第一个 for 循环中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 2016-10-14
      • 2017-02-20
      • 2013-09-26
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多