2013-05-10 107 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