<Swing Dev> [9] Review request for 8074883: Tab key should move to focused button in a button group

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Mon Nov 14 13:24:22 UTC 2016


On 14.11.16 12:16, Semyon Sadetsky wrote:
>> But what about the question to specification, is it the spac below is
>> true when the selected toggle button is disabled?:
>>
>> 48 * If this toggle button is a member of the {@link ButtonGroup}
>> which has an another focusable toggle button selected, and the focus
>> cause argument denotes window activation or focus traversal action of
>> any direction the result of the method execution is the same as
>> calling {@link Component#requestFocus(FocusEvent.Cause)} on the toggle
>> button selected in the group.
>>
>> Because the current implementation filter out disabled components(the
>> same question is about invisible, non-displayable), but according to
>> the spec results should be the same like we call the method directly
>> on the selected button.
> Probably you missed my previous answer to this question:
>
> If a component is disabled it cannot receive input focus, see
> java.awt.Component#isEnabled specs.  The proposed spec clearly states :
>
>  247      * If this toggle button is a member of the {@link ButtonGroup}
> which has
>  248      * an another ***focusable*** toggle button selected, and the
> focus cause argument
>
> in Swing a component may not receive focus if it is disabled, invisible,
> non-displayable...
> According to the spec the result will be the same if you call
> Component#requestFocus on ***this*** toggle button.

It just confirms that the new spec is not complete, result of 
"Component#requestFocus on ***this*** toggle button" will be different 
from the result of "selected#requestFocus(FocusEvent.Cause)" if the 
selected component is disabled. Because "Component#requestFocus on 
***this*** toggle button" will select "this", and 
"selected#requestFocus(FocusEvent.Cause)" will select nothing.
The property "***focusable***" is a defined in the 
Component#isFocusable() and have nothing related to visibility, enable 
state/etc. It will return true if component is disabled.

>>
>>>>
>>>>>>
>>>>> If a component is disabled it cannot receive input focus, see
>>>>> java.awt.Component#isEnabled specs.  The proposed spec clearly
>>>>> states :
>>>>>
>>>>>  247      * If this toggle button is a member of the {@link
>>>>> ButtonGroup}
>>>>> which has
>>>>>  248      * an another ***focusable*** toggle button selected, and the
>>>>> focus cause argument
>>>>>
>>>>>> It seems that the code in getGroupSelection() will focus the first
>>>>>> element in the group, but what elements will be focused if we call
>>>>>> Component#requestFocus(FocusEvent.Cause) directly for this disabled
>>>>>> compoenent? Will the the same(first) element be selected?
>>>>> I did find any mentions of "first element" in the proposed spec.
>>>>> Please
>>>>> clarify this question.
>>>>> According to the proposed spec the case when
>>>>> Component#requestFocus(FocusEvent.Cause) is called on disabled
>>>>> component
>>>>> will be handled as:
>>>>>
>>>>>  253      * In all other cases the result of the method is the same as
>>>>> calling
>>>>>  254      * {@link Component#requestFocus(FocusEvent.Cause)} on this
>>>>> toggle button.
>>>>
>>>> The specification states that the call to
>>>> this.requestFocus(FocusEvent.Cause cause);
>>>> and the call to
>>>> selected.requestFocus(FocusEvent.Cause cause);
>>>> produce the same result "If this toggle button is a member of the
>>>> {@link ButtonGroup} which has an another focusable toggle button
>>>> selected, and the focus cause argument denotes window activation or
>>>> focus traversal action of any direction"
>>>>
>>>> The question was "is that always true if the selected element is
>>>> disabled(but focusable)"? I guess that the implementation in the fix
>>>> will select the first "this"(the button on which requestFocus() was
>>>> called), but in the second case something different will be selected.
>>>>
>>>>>>> On 10/25/2016 3:14 PM, Alexandr Scherbatiy wrote:
>>>>>>>> On 10/19/2016 8:14 PM, Semyon Sadetsky wrote:
>>>>>>>>> Hello,
>>>>>>>>>
>>>>>>>>> Please review fix for JDK9:
>>>>>>>>>
>>>>>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8074883
>>>>>>>>>
>>>>>>>>> webrev: http://cr.openjdk.java.net/~ssadetsky/8074883/webrev.00/
>>>>>>>>>
>>>>>>>>> To avoid unexpected selection change the selected button of a
>>>>>>>>> button
>>>>>>>>> group should always grab focus when focus is transferred form
>>>>>>>>> component outside the group to any unselected button inside the
>>>>>>>>> group
>>>>>>>>> in case of traversal or initial container activation actions.
>>>>>>>>   - It is better to pass the cause and boolean focusInWindow
>>>>>>>> arguments
>>>>>>>> to the getGroupSelection() method to avoid some code duplication
>>>>>>>> like
>>>>>>>> switching over the same cause values.
>>>>>>>>   - The fix will require a CCC request because it updates a javadoc
>>>>>>>> for the publci method.
>>>>>>>>
>>>>>>>>   Thanks,
>>>>>>>>   Alexandr.
>>>>>>>>>
>>>>>>>>> --Semyon
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>>
>


-- 
Best regards, Sergey.



More information about the swing-dev mailing list