2012-09-30 67 views
2

我在我的JTable上寫了一個「雙擊」事件。我的JTable,即。 myTaskTable填充了多個具有多列的行。當我雙擊JTable的其中一行時,我想要檢索行索引。我不知道爲什麼它總是返回一個-1的索引,導致一個異常。我在俯視什麼?可能會出現什麼問題?<JTable> .getSelectedRow()返回-1

這是我如何從JTable檢索所選行的索引 - myTaskTable

int selRow = myTaskTable.getSelectedRow(); 

謝謝!

編輯

下面是代碼:

... 
myTaskTable.addMouseListener(this); 
... 
public void mouseClicked(MouseEvent e) 
{ 
if(e.getModifiers() == MouseEvent.BUTTON1_MASK) 
{ 
    if(e.getClickCount() == 2) 
    { 
    e.consume(); 
    int selRow = myTaskTable.getSelectedRow(); 
    System.out.println("GridReport double clicked on row="+selRow); 
    } 
    } 
} 
+4

我認爲你的問題出現在你沒有向我們展示的代碼中。我們猜測未顯示代碼錯誤的能力非常有限。 –

+0

僅供參考,以下是一個工作[示例](http://stackoverflow.com/a/11241218/230513)。 – trashgod

+0

e.consume()是什麼?另外,myTaskTable變量是否涉及實際上正在顯示的JTable?爲獲得更好的幫助,請考慮創建併發布[sscce](http://sscce.org)。這需要一點努力,但通常是值得的。 –

回答

3

使用的情況下獲得該行的索引,而不是表選擇:

final int selectedRowIndex = table.rowAtPoint(mouseEvent.getPoint()); 
// If the rows are sorted or filtered 
final int modelRowIndex = table.convertRowIndexToModel(selectedRowIndex); 

getSelectedRow()不會與多選擇的行工作(多選題),因爲它總是返回"the index of the first selected row"

+0

解決了這個問題。非常感謝埃迪。 – user1639485

0

你試圖把e.consume();作爲最後一個發言?

public void mouseClicked(MouseEvent e){ 
if(e.getModifiers() == MouseEvent.BUTTON1_MASK){ 
    if(e.getClickCount() == 2){ 
    int selRow = myTaskTable.getSelectedRow(); 
    System.out.println("GridReport double clicked on row="+selRow); 
    e.consume(); 
    } 
    } 
} 

正常e.consume();在您完成反應式代碼時調用。這將清除事件的依賴關係,因此它也可能會清除選定的行。