从JTable中删除行时出现问题

时间:2013-05-10 21:57:55

标签: java swing nullpointerexception jtable row

我在我的GUI应用程序中创建了一个JTable,我想使用我已创建的添加和删除按钮添加行并删除行,问题是在删除行时我想要选择行索引但是在调用NullPointerException方法时我得到了getSelectedRow()。我试图谷歌它并没有找到我的问题答案我也尝试阅读java文档,但我发现这种方法不会抛出异常。

代码:

// creating the table
JTable table = new JTable(model);
    model.addColumn("NO.");
    model.addColumn("Name");
    model.addColumn("Status");
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    table.setRowSelectionAllowed(true);
    table.setShowGrid(false);
    table.getColumnModel().getColumn(0).setPreferredWidth(28);
    table.getColumnModel().getColumn(1).setPreferredWidth(222);
    table.getColumnModel().getColumn(2).setPreferredWidth(100);
    table.setBackground(color);
    table.setPreferredScrollableViewportSize(new Dimension(350,250));
    table.setFillsViewportHeight(true);
    scroll = new JScrollPane(table);
    center.add(scroll);

// adding records to it
public class AddEvent implements ActionListener{
public void actionPerformed (ActionEvent event){

    String text = write.getText();

    if (!text.equals("") && !text.contains(" ")){
        String view = "http://www." + text;
        write.setText(null);
        model.addRow(new Object[]{model.getRowCount()+1, view,"Active"});
    }

}
}


// to remove the selected row
public class RemoveEvent implements ActionListener{
public void actionPerformed (ActionEvent event){
          int index = table.getSelectedRow(); // it throws the exception here
      table.clearSelection();             
      System.out.println(index);
      if(index != -1){
      table.remove(index);
      }

    }

}

2 个答案:

答案 0 :(得分:2)

如果在这里抛出异常

int index = table.getSelectedRow();

然后table 可能是 null。要使ActionListener起作用,应将类成员变量table分配给JTable实例。在实例化变量时,检查您是否正在隐藏变量。取代

JTable table = new JTable(model);

table = new JTable(model);

答案 1 :(得分:2)

您发布的代码不完整,所以我所能做的只是猜测。

JTable table = new JTable(model);

此变量看起来像一个局部变量,因此它不适用于其他类。你可能在某处定义了一个类变量:

JTable table; // this is null 

试试这个:

//JTable table = new JTable(model);
table = new JTable(model);

还应从DefaultTableModel中删除数据:

model.removeRow(...);