<Swing Dev> Review request for 8133039 Provide public API to sun.swing.UIAction#isEnabled(Object)

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Tue Nov 10 11:26:04 UTC 2015


Hello,

Could you review the fix:
   bug: https://bugs.openjdk.java.net/browse/JDK-8133039
   webrev: http://cr.openjdk.java.net/~alexsch/8133039/webrev.00

   There are two use cases for the requested API:

   - javax.swing.Action can be only enabled or disabled for all 
components at once.
     Sometimes it is necessary that an action was enabled only for some 
components with required properties.
     This is now implemented by internal 
sun.swing.UIAction.isEnabled(Object sender) method.

   - Wrap an existed action to add new behaviour.
     For example:
      ------------------------------------------
     /**
      * Mute an action by doing nothing if the original action is enabled
      */
     private static class MutedAction extends AbstractAction {
         private final Object sender;
         private final Action action;

         public MutedAction(Object sender, Action action) {
             this.sender = sender;
             this.action = action;
         }

         @Override
         public void actionPerformed(ActionEvent e) {
             // muted
         }

         @Override
         public boolean isEnabled() {
             if(action instanceof sun.swing.UIAction) {
                 // internal API is used
                 return ((sun.swing.UIAction) action).isEnabled(sender);
             }
             else {
                 return action.isEnabled();
             }
         }
     }
      ------------------------------------------

   For more details see the email: 
http://mail.openjdk.java.net/pipermail/swing-dev/2015-August/004729.html

   The proposed fix adds public 'accept' method to the 
javax.swing.Action class:

      ------------------------------------------
     /**
      * Determines whether the action should be invoked for the specified
      * component.
      *
      * @param component the component to check
      * @return {@code true} if the action should be invoked for the passed
      *          component
      */
     default boolean accept(JComponent component) {
         return true;
     }
      ------------------------------------------

Thanks,
Alexandr.




More information about the swing-dev mailing list