<Swing Dev> [9] Review request for 8033699: Incorrect radio button behavior
Alexander Scherbatiy
alexandr.scherbatiy at oracle.com
Tue Sep 16 07:39:17 UTC 2014
I have missed one more case:
527 public void keyPressed(KeyEvent e) {
528 if (e.getKeyCode() == KeyEvent.VK_TAB) {
// jumpToNextComponent(true)
538 }
539
540 if (e.getKeyCode() == KeyEvent.VK_TAB &&
e.isShiftDown()) {
//jumpToNextComponent(false)
550 }
551 }
It seems that if e.isShiftDown() is true then both
jumpToNextComponent(true) and jumpToNextComponent(false) methods can be
called.
Thanks,
Alexandr.
On 9/16/2014 7:38 AM, Vivi An wrote:
> Fixed. New Webrev: http://cr.openjdk.java.net/~van/8033699/webrev.03/
>
> Thanks Alex.
>
> Regards,
>
> ~ Vivi
>
> On 9/15/2014 2:59 AM, Alexander Scherbatiy wrote:
>> On 9/12/2014 8:56 PM, Vivi An wrote:
>>> Thanks Alexander.
>>>
>>> All items addressed except last one, please see comments inline.
>>> New Webrev: http://cr.openjdk.java.net/~van/8033699/webrev.02/
>>
>> 163 if ( keyListener != null ) {
>>
>> Could you remove spaces in the brackets? After code formatting it
>> should be "if (keyListener != null) {"
>>
>>>> 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.
>>
>> It seems that lastBtn != null and firstBtn != null checks are not
>> necessary in this case.
>>
>> Thanks,
>> Alexandr.
>>
>>>>
>>>> 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
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
More information about the swing-dev
mailing list