<Swing Dev> [11] Review Request: JDK-6481195 ListSelectionListener indicates events on model.addElement after model.clear()

Semyon Sadetsky semyon.sadetsky at oracle.com
Mon Feb 5 16:49:14 UTC 2018


On 02/02/2018 11:54 PM, Pankaj Bansal wrote:

> Hi Sergey,
>
>> This means that if an application will call any of these methods then the anchor/lead will be taken from the latest call. For example if the application will select a few intervals >then the anchor/lead will be based on the latest interval. But if selection model will be modified(for example via >insertIndexInterval/setAnchorSelectionIndex/setLeadSelectionIndex/removeIndexInterval/etc)after
>> that it does not mean that anchor/lead will be preserved.
> Thanks for clarification. This makes perfect sense. Anchor/lead can't be preserved if selection model is changed by calls to removeIndexInterval, insertIndexInterval etc.
>
> Hi Semyon,
> please let me know if this explanation looks good to you.
I cannot accept this explanation. It looks like an attempt to read what 
actually was not written.
The proposed changes will have direct consequences in the user 
experience which this bug never required. The point of the bug to have 
anchor/lead cleanup after the model becomes empty and so it may not have 
any selection. This doesn't cause any exceptions so we might close this 
bug as won't fix because the application developer may set anchor/lead 
index to -1 after the model is cleaned up like we do in many places in 
Swing after the selection model is cleared.
Although, the bug submitter mentioned that "Setting it to -1 does not 
work". It is not clear why.

So, we might either close this bug as "Won't fix" and give an 
explanation how to clear anchor/lead, or the change should only fix the 
reported issue. I'm against to change the selection behavior as part of 
this bug. If it really need to be changed it should be reported and 
discussed separately.

--Semyon
>
> Regards,
> Pankaj Bansal
>
> -----Original Message-----
> From: Sergey Bylokhov
> Sent: Saturday, February 3, 2018 1:07 PM
> To: Pankaj Bansal; Semyon Sadetsky; swing-dev at openjdk.java.net
> Subject: Re: <Swing Dev> [11] Review Request: JDK-6481195 ListSelectionListener indicates events on model.addElement after model.clear()
>
> On 02/02/2018 23:05, Pankaj Bansal wrote:
>> Hi Sergey,
>>
>>>> Can somebody clarify why -1/-1 is incorrect? lead/anchor values are not min/max selected element, it can be any elements: selected/unselected and is not necessary >>first/last selected element.
>> According to API description of getAnchor/LeadSelectionIndex, anchor/lead return the first/second index of most recent call to setSelectionInterval(), addSelectionInterval() or removeSelectionInterval().
> This means that if an application will call any of these methods then the anchor/lead will be taken from the latest call. For example if the application will select a few intervals then the anchor/lead will be based on the latest interval. But if selection model will be modified(for example via insertIndexInterval/setAnchorSelectionIndex/setLeadSelectionIndex/removeIndexInterval/etc)after
> that it does not mean that anchor/lead will be preserved.
>
>> Now in following example, most recent call to one of the three API was with 0/0 as first/second index as addSelectionInterval is called from setSelectedIndices. So the anchor/lead should be 0/0 according to the API description. So -1/-1 value is wrong.
>> list.setSelectedIndices(new int[] {1, 0}); // selection is [0 ,1]
>> lead/anchor = 0/0 model.removeElementAt(0); // selection is [0]
>> lead/anchor = 0/0 (before fix), -1/-1(after fix)
>>
>> But as I pointed out with next example, removeIndexInterval  sets wrong anchor/lead value for all indices even before the fix.  removeIndexInterval handles the 0 index specially and maintains correct value of anchor/lead. I have just removed the code for special handling of 0 index.
>> list.setSelectedIndices(new int[] {2, 1}); // selection is [1 ,2]
>> lead/anchor = 1/1 model.removeElementAt(1); // selection is [1]
>> lead/anchor = 0/0  (before the fix. I have verified it. It should be
>> 1/1 according to API description)
>>
>> I also feel that, if we go by API description, only setSelectionInterval(), addSelectionInterval() or removeSelectionInterval() should change the achor/lead values. But there are other APIs lile insertIndexInterval, removeIndexInterval which change anchor/lead. Also there are set functions for anchor/lead, which should not be there.
>>
>> Regards,
>> Pankaj Bansal
>>
>> -----Original Message-----
>> From: Sergey Bylokhov
>> Sent: Saturday, February 3, 2018 3:25 AM
>> To: Pankaj Bansal; Semyon Sadetsky; swing-dev at openjdk.java.net
>> Subject: Re: <Swing Dev> [11] Review Request: JDK-6481195
>> ListSelectionListener indicates events on model.addElement after
>> model.clear()
>>
>> On 01/02/2018 23:25, Pankaj Bansal wrote:
>>> Ok, I got your point. In the example you gave, as
>>> addSelectionInterval was called from setSelectedIndices with 0 at
>>> last, the lead/anchor should be 0/0 not -1/-1.
>> Can somebody clarify why -1/-1 is incorrect? lead/anchor values are not min/max selected element, it can be any elements: selected/unselected and is not necessary first/last selected element.
>>
>>
>> --
>> Best regards, Sergey.
>>
>
> --
> Best regards, Sergey.




More information about the swing-dev mailing list