2013-05-10 66 views
0

我在我的GUI应用程序中制作了JTable,我想使用添加并删除已创建的按钮来添加行并将行删除,问题是删除我想要的行时所选的行索引,但在调用getSelectedRow()方法时我得到了NullPointerException。我试图谷歌它,并没有发现我的问题答案也试图读取Java文档,但我发现这种方法不会抛出通常的例外。从JTable中删除行时出现问题

代码:

// 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); 
     } 

    } 

} 
+0

1)为了更好地帮助越早,张贴[SSCCE](http://sscce.org/)。 2)最好更改'TableModel'。独自离开桌子。 – 2013-05-10 22:00:37

回答

2

如果异常正在这里

int index = table.getSelectedRow(); 

抛出,则table可能null。要使ActionListener工作,应将类成员变量table分配给JTable实例。检查变量实例时是否隐藏变量。更换

JTable table = new JTable(model); 

table = new JTable(model); 
+0

谢谢,它现在不再抛出异常,但它不能识别所选的行,并给我索引的值为-1 – 2013-05-10 22:08:45

+0

当没有选择任何内容时返回-1。你选择了一行吗? – Reimeus 2013-05-10 22:09:50

+0

是的,我选择了一行然后按删除,没有发生任何事情,只是它清除我的选择(按我的命令),并发送给我-1 – 2013-05-10 22:15:47

2

您发布的代码是不完整的,因此所有我能做的就是做一个猜测。

JTable table = new JTable(model); 

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

JTable table; // this is null 

试试这个:

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

而且数据应该从的DefaultTableModel中删除:

model.removeRow(...); 
+0

谢谢,它不再抛出异常,但它不承认选定的行,并给予我指数的值为-1 – 2013-05-10 22:09:14