<Swing Dev> [9] Review request for 8033699: Incorrect radio button behavior

Vivi An vivi.an at oracle.com
Fri Sep 12 16:56:37 UTC 2014


Thanks Alexander.

All items addressed except last one, please see comments inline.
New Webrev: http://cr.openjdk.java.net/~van/8033699/webrev.02/

Regards,

Vivi

On 9/11/2014 3:21 AM, Alexander Scherbatiy wrote:
> On 9/11/2014 2:56 AM, Vivi An wrote:
>> Hello Alexander,
>>
>> Thanks for nice review, new patch is available as below:
>> webrev: http://cr.openjdk.java.net/~van/8033699/webrev.01/
>
>  163         if ( keyListener != null ) {
>  164             button.removeKeyListener( keyListener );
>
> Could you formate the code in the brackets.
>
>  355     private boolean isValidRadioButtonObj(Object obj){
>  356         if ((obj != null) && (obj instanceof JRadioButton) &&
>
> It is possible to use "return (obj != null) && ...".
>
>
>  375         if (isValidRadioButtonObj(eventSrc) == false)
>
> It is possible to use "if (!isValidRadioButtonObj(eventSrc))". The 
> same is for line 466.
>
>
>  379         btnGroupInfo.getButtonGroupInfo();
>  380         if (btnGroupInfo.srcFound){
>  ....
>
> You can move this code to the ButtonGroupInfo class 
> getNewSelectedButton(boolean next) method.
> It allows to use variable names (previousBtn) instead of 
> btnGroupInfo.previousBtn.
>
>  391             if (newSelectedBtn != null &&
>  392                 (newSelectedBtn != (JRadioButton) eventSrc)){
>
> It is not necessary to cast the eventSrc to JRadioButton here.
eventSrc is Object so still need to be casted, in 02version, the 
functionality encapsulated in ButtonGroupInfo class, so now using 
activeBtn, no need to cast in this case.

>  401 private class SelectPreviousBtn extends AbstractAction
>  402     {
>
> Could you move the bracket to the class declaration line?
>
>  505                 if (isValidRadioButtonObj(eventSrc))
>  506                     e.consume();
>  507                 jumpToNextComponent((JRadioButton)eventSrc, true);
>
> Line 507 is not under the condition. It means that eventSrc can have 
> different type from JRadioButton.
>
>
>  543             if (next && btnGroupInfo.lastBtn != null)
>  544                 KeyboardFocusManager.
>  545 
> getCurrentKeyboardFocusManager().focusNextComponent((JComponent)btnGroupInfo.lastBtn);
>  546             else if (btnGroupInfo.firstBtn != null)
>  547                 KeyboardFocusManager.
>  548 
> getCurrentKeyboardFocusManager().focusPreviousComponent((JComponent)btnGroupInfo.firstBtn);
>  549         }
>
> Should the first button be focused If next is true and last button is 
> null?
Don't think last button could be null when this function is triggered, 
last and first will always be set in case there is at least one valid 
(enabled and visible) radio button in the group.
>
> Thanks,
> Alexandr.
>
>>
>> Regards,
>>
>> ~ Vivi
>>
>>
>> On 9/8/2014 5:43 AM, Alexander Scherbatiy wrote:
>>> On 9/4/2014 10:56 PM, Vivi An wrote:
>>>> Hello,
>>>>
>>>> Please review fix for JDK-8033699.  Changes made:
>>>> 1) When tab or shift-tab key pressed,  focus moved to next/previous
>>>> component outside of the radio button group
>>>> 2) Using up/down or left/right arrow key to change selection inside
>>>> radio button group
>>>>
>>>> Bug:https://bugs.openjdk.java.net/browse/JDK-8033699
>>>> Webrev:http://cr.openjdk.java.net/~van/8033699/webrev.00/
>>>
>>>   56     private KeyListener keyListener = null;
>>>   57     private KeyHandler handler = null;
>>>
>>> It seems that these both fields point to the same object. Is it 
>>> possible to get rid of one of them?
>>>
>>>
>>>  152         if ( keyListener != null ) {
>>>  153             button.removeKeyListener( keyListener );
>>>  154         }
>>>
>>> Some UIs also set the listener to null in the 
>>> uninstallUI()/uninstallListeners() methods (like BasicComboBoxUI or 
>>> BasicColorChooserUI).
>>> Should the keyListener also be set to null to free the KeyHandler 
>>> object?
>>>
>>>  369         if (!(eventSrc instanceof JRadioButton &&
>>>  370             ((JRadioButton) eventSrc).isVisible() && 
>>> ((JRadioButton) eventSrc).isEnabled()))
>>>
>>> This check is used several times. It can be moved to a separate method.
>>>
>>>  373         // Get the button model from the source.
>>>  374         ButtonModel model = ((AbstractButton) 
>>> eventSrc).getModel();
>>>  375         if (!(model instanceof DefaultButtonModel))
>>>  376             return;
>>>  377
>>>  378         // If the button model is DefaultButtonModel, and use 
>>> it, otherwise return.
>>>  379         DefaultButtonModel bm = (DefaultButtonModel) model;
>>>  380         if (bm == null)
>>>  381             return;
>>>
>>> The second check is not necessary because (model instanceof 
>>> DefaultButtonModel) returns false for null model.
>>>
>>>
>>>  404         AbstractButton curElement = null;
>>>
>>>   The curElement variable declaration could be moved into the 
>>> 'while' block.
>>>
>>>
>>>  408             if (curElement instanceof JRadioButton &&
>>>  409                     ((JRadioButton) curElement).isVisible() &&
>>>  410                     ((JRadioButton) curElement).isEnabled()){
>>>
>>>   It is possible to use 'continue' here to not put the other code 
>>> inside the 'if' block.
>>>
>>>
>>>  418                 else if (!srcFound){
>>>  422                 } else if (srcFound && nextBtn == null){
>>>
>>> It is not necessary to check the srcFound in the second 'if' because 
>>> it should already have true value.
>>>
>>>
>>>  444             if (newSelectedBtn != null){
>>>  445                 newSelectedBtn.requestFocusInWindow();
>>>  446                 newSelectedBtn.setSelected(true);
>>>  447             }
>>>
>>>
>>> Is it possible here that newSelectedBtn == eventSrc?
>>>
>>>  522         private void jumpToNextComponent(JRadioButton btn, 
>>> boolean next){
>>>
>>> The code that retrieves elements from a button group is also used in 
>>> the selectRadioButton()
>>> and can be moved to a separate method.
>>>
>>> Thanks,
>>> Alexandr.
>>>
>>>>
>>>> JPRT build succeeded, JCK tests for JRadiobutton and JCheckBox all 
>>>> passed.
>>>>
>>>> Thank you
>>>>
>>>> Regards,
>>>>
>>>> Vivi
>>>>
>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/swing-dev/attachments/20140912/d688da7e/attachment.html>


More information about the swing-dev mailing list