Java <;JTable>;。getSelectedRow()正在返回-1

Java <;JTable>;。getSelectedRow()正在返回-1,java,indexing,jtable,Java,Indexing,Jtable,我在我的JTable上写了一个“双击”事件。我的JTable,即。myTaskTable由许多具有多列的行填充。我希望在双击JTable中的一行时检索行索引。我不知道为什么它总是返回一个-1的索引,导致异常。我是不是忽略了什么?出了什么问题 这就是我如何从JTable-myTaskTable中检索所选行的索引 int selRow = myTaskTable.getSelectedRow(); 谢谢大家! 编辑 代码如下: ... myTaskTable.addMouseListener(th

我在我的
JTable
上写了一个“双击”事件。我的JTable,即。myTaskTable由许多具有多列的行填充。我希望在双击
JTable
中的一行时检索行索引。我不知道为什么它总是返回一个-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);
    }
  }
}

你有没有试过把
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.消费()在处理完反应式代码后被调用。这将清除事件的依赖项,因此也可能会清除所选行。

使用事件而不是表选择获取行索引:

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

getSelectedRow()
无法处理多个选定行(允许多选),因为它将始终返回。

我认为您的问题在于您没有向我们展示的代码。我们猜测未显示代码中错误的能力非常有限。作为参考,这里有一个工作符号。
e.consume()
的作用是什么?另外,myTaskTable变量是否引用了实际显示的JTable?为了更好的帮助,请考虑创建和发布。这需要一点努力,但通常是值得的。