<Swing Dev> [9] Review request for 8032874: ArrayIndexOutOfBoundsException in JTable while clearing data in JTable
Alexander Potochkin
alexander.potochkin at oracle.com
Tue Apr 15 12:55:56 UTC 2014
Looks good
Thanks
alexp
On 4/15/2014 3:30 PM, Alexander Scherbatiy wrote:
>
> The fix looks good for me.
>
> Thanks,
> Alexandr.
>
> On 4/15/2014 11:13 AM, dmitry markov wrote:
>>
>> On 14/04/2014 17:06, Alexander Scherbatiy wrote:
>>> On 4/14/2014 4:33 PM, dmitry markov wrote:
>>>> Alexandr,
>>>>
>>>> Please find my answer below.
>>>>
>>>> Thanks,
>>>> Dmitry
>>>> On 14/04/2014 14:12, Alexander Scherbatiy wrote:
>>>>> On 4/14/2014 10:59 AM, dmitry markov wrote:
>>>>>> Hi Alexandr,
>>>>>>
>>>>>> Thank you for the review. According to the specification in
>>>>>> ListSelectionModel: getAnchorSelectionIndex() and
>>>>>> getLeadSelectionIndex() return the first index and the second
>>>>>> index arguments from the most recent call to
>>>>>> setSelectionInterval(), addSelectionInterval() or
>>>>>> removeSelectionInterval(). So if -1 is not set explicitly via the
>>>>>> methods described above, it is correct to return value which is
>>>>>> not -1 even for empty selection. I guess, such behavior is
>>>>>> intended for storing the information about the previous selection.
>>>>> Is it possible that the lead selection index can be greater
>>>>> than the table row numbers?
>>>> Yes, it is possible. The lead selection index may be greater or
>>>> equal to the row count, (e.g. for case described in the bug the
>>>> lead index is 0 for the empty selection).
>>>
>>> What about if there are only 2 row counts in the table but
>>> the lead selection index is 5? Will the
>>> convertRowIndexToView(viewLeadIndex) method
>>> works correctly in this case.
>> It will work properly in this case, since the lead index will be
>> updated by DefaultListSelectionModel.removeIndexInterval(). The
>> problem takes place only when we remove the last row from a table. In
>> this case removeIndexInterval() does not update the lead and the
>> anchor indexes, (i.e. they stay equal to 0). This causes failure in
>> convertRowIndexToView() method, since we try to use it on empty
>> selection. Possible way to avoid the problem is not invoke
>> convertRowIndexToView() for empty selection.
>>
>> I do not think we should change the current implementation of
>> removeIndexInterval(), since it keeps the values of lead and anchor
>> indexes in valid and correct range and prevents us from returning
>> something strange, (e.g. -5, -10) as lead or anchor index of the
>> previous selection.
>>
>> Thanks,
>> Dmitry
>>>
>>> Thanks,
>>> Alexandr.
>>>
>>>>>
>>>>> I seems that the getAdjustedIndex(index, row) method checks
>>>>> both these cases.
>>>> That is right. The fix does the same thing as getAdjustedIndex()
>>>> method. Unfortunately we can not use the method in the fix, since
>>>> if I get it right getAdjustedIndex() is designed for work with
>>>> selectionModel, but here we work with modelSelection.
>>>>>
>>>>> Thanks,
>>>>> Alexandr.
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Dmitry
>>>>>> On 11/04/2014 17:07, Alexander Scherbatiy wrote:
>>>>>>> On 4/11/2014 4:36 PM, dmitry markov wrote:
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>> Could you review the fix for jdk9, please?
>>>>>>>>
>>>>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8032874
>>>>>>>> webrev:
>>>>>>>> http://cr.openjdk.java.net/~dmarkov/8032874/jdk9/webrev.00/
>>>>>>>>
>>>>>>>> Problem description: If JTable has Sorter and Filter and
>>>>>>>> selected row is removed ArrayIndexOutOfBoundsException will be
>>>>>>>> thrown.
>>>>>>>> Fix: The method restoreSelection() in SortManager class should
>>>>>>>> invoke convertRowIndexToView() only when modelSelection is NOT
>>>>>>>> empty.
>>>>>>>
>>>>>>> Is it the right behavior that
>>>>>>> modelSelection.getLeadSelectionIndex() does not return -1 when
>>>>>>> modelSelection.isSelectionEmpty() is true?
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Alexandr.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Dmitry
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
More information about the swing-dev
mailing list