JTable.getSelectedRow()返回错误的值

时间:2018-02-01 10:48:44

标签: java swing

在使用javax.swing的项目中,代码如下:

JTable m_Table;
...

public void actionPerformed( ActionEvent e )
{
    TableCellEditor editor = m_Table.getCellEditor();
    if( editor != null )
    {
        editor.stopCellEditing();
    }

    int row = m_Table.getSelectedRow();
    if( row < 0 )
    {
        row = 0;
    }
    // bug: if the cursor is in an edit box,
    // the row number happens to be greater by 1

问题在于,row看起来像是基于1而不是基于0,但仅当光标位于单元格编辑框中时才会显示。

为什么getSelectedRow()返回错误的值?

1 个答案:

答案 0 :(得分:0)

stopCellEditing()有一个未记录的副作用:它将焦点移动到下一个 - 不确定是什么(单元格?可编辑单元格?) - 但下一行是在下一行。

编辑根据评论,stopCellEditing()不会改变焦点,但它会调用可以执行此操作的侦听器。 (好吧,将焦点移到下一个字段是应用软件中常见的模式。)

补救措施是首先获取getSelectedRow(),然后才停止使用stopCellEditing()。