Java getSelectedRow()返回错误的值

Java getSelectedRow()返回错误的值,java,swing,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.getSele

在使用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
JTable m_表;
...
已执行的公共无效操作(操作事件e)
{
TableCellEditor=m_Table.getCellEditor();
如果(编辑器!=null)
{
editor.stopCellEditing();
}
int row=m_Table.getSelectedRow();
如果(行<0)
{
行=0;
}
//错误:如果光标位于编辑框中,
//行号恰好大于1
问题是,看起来
是基于1的,而不是基于0的,但仅当光标位于单元格编辑框中时

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

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

根据注释进行编辑,stopCellEditing()不会更改焦点,但它会调用可以更改焦点的侦听器(将焦点移动到下一个字段是应用程序软件中的常见模式)


解决方法是先获取SelectedRow(),然后再停止CellEditing()。

你能写一篇文章吗?我感兴趣的是原因,而不仅仅是解决方法proposed@AxelH原因是stopCellEditing()将焦点移动到下一个单元格(如果有)不,它将触发一个事件,该事件将触发每个
CellEditorListener
并调用。侦听器将更新
JTable
中的值(CellEditorListener
)使用编辑器中的一个。焦点的更改与调用的方法无关。如果您不能提供,如果您可以重现问题,这可能是因为这不是问题…嗯,很好。确实可能是因为侦听器。如果这是真的,stopCellEditing()的副作用正在调用侦听器,而正是侦听器推进焦点。
stopCellEditing()有一个未记录的副作用:它将焦点移动到下一个
-不,它没有。stopCellEditing()从表中删除编辑器。被编辑的单元格将保留焦点。因此,问题是如何调用ActionListner以及为什么要更改具有焦点的单元格?通常通过单击按钮来完成。因此,根据问题的上下文,我们无法真正告诉您发生了什么,因为您没有提供正确的答案。