jTable索引是错误的

时间:2016-01-06 19:29:06

标签: java swing jtable

当我在jtable中选择行时,它总是返回-1作为表行索引。

这就是我将数据填充到jtable的方式:

private void addResultToRecTable(DefaultTableModel dtm, ArrayList<RecipeModule> al) {

    if (al != null) {
        int rowCount = dtm.getRowCount();
        for (int i = 0; i < rowCount; i++) {
            dtm.removeRow(0);
        }

        for (int i = 0; i < al.size(); i++) {
            String[] recArray = {al.get(i).getRecID(), al.get(i).getRecName(), al.get(i).getRecCategory(), al.get(i).getRecQty(), al.get(i).getRecUnit()};
            dtm.addRow(recArray);

        }
    }

这是我将数据传递给addResultToRecTable()方法的方法:

ArrayList<RecipeModule> al = RecipeController.searchRecipes(txtRepSearchName.getText(), txtRecSearchCate.getText());
addResultToRecTable(recDefaultTableModel, al);

将数据填入表格后。我在表格中选择了一行并打印出选定的行索引。然后我收到了这个错误。

private void tableRecSearchKeyReleased(java.awt.event.KeyEvent evt) {   
    try{
        int selectedRow = tableRecIngredients.getSelectedRow();
        System.out.println(selectedRow);
    }

但是我收到了这个错误:

java.lang.ArrayIndexOutOfBoundsException: -1

我不确定问题是什么。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

private void tableRecSearchKeyReleased(java.awt.event.KeyEvent evt)

我不知道那件事是什么。也许行选择还没有完成。

如果您想知道行选择何时发生变化,请在表格中添加ListSelectionListener

table.getSelectionModel().addListSelectionListener(...);

阅读How to Write a List Selection Listener上Swing教程中的部分,了解更多信息和示例。

    //int rowCount = dtm.getRowCount();
    //for (int i = 0; i < rowCount; i++) {
    //    dtm.removeRow(0);
    //}

要从表模型中删除所有行,您只需使用:

dtm.setRowCount(0);