<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
Thu Nov 24 14:08:45 UTC 2016


On 14.11.16 19:41, Semyon Sadetsky wrote:
>>>  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.

Yes they are different and can results the different results, but 
currently spec says the opposite: "(1) method execution is the same as 
calling (2)". It will be good to rephrase it somehow that we will try to 
move focus to the selected component.

> 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().

What you mean is not "focusable" but possibility to be a "focus owner".

>>
>>>>
>>>>>>
>>>>>>>>
>>>>>>> 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