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