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

Semyon Sadetsky semyon.sadetsky at oracle.com
Mon Nov 14 16:41:54 UTC 2016



On 14.11.2016 16:24, Sergey Bylokhov wrote:
> 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.
I did not get this. There two results of the call 1) 
selected.Component#requestFocus 2) this.Component#requestFocus. Of cause 
they are different. They cover 100% of outcome. "select nothing" is not 
mentioned in the spec. Is it really needed?
> 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.
I did not mean isFocusable property, but the general capability to get 
focus. The standard check for focusability is isVisible() && 
isDisplayable() && isEnabled() && isFocusable().
>
>>>
>>>>>
>>>>>>>
>>>>>> 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
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>




More information about the swing-dev mailing list