2

我在我的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);
    }
  }
}
4

2 回答 2

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"

于 2012-09-30T22:18:37.847 回答
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();当您完成响应式代码时,将调用normaly 。这会清除事件的依赖关系,因此它也可能会清除选定的行。

于 2012-09-30T22:07:20.677 回答