Hello Alexandr, Basically we need to detect and intercept focus changes.
java.awt.Component allows to override this methods: requestFocus() requestFocus(boolean) requestFocusInWindow() requestFocusInWindow(boolean) requestFocus() is only invoked when the component is focused by a mouse click. But no requestFocus* method is invoked when a FocusTraversalPolicy is involed (f. e. the user press TAB to focus next component). sun.awt.RequestFocusController#acceptRequestFocus is invoked in both cases. Attached a demo to reproduce it: - if TextField is focused by a mouse click "requestFocus" and "acceptRequestFocus" is logged - if TextField is focused by TAB only "acceptRequestFocus" is logged Some more notes about the test program: ComponentAccessorDelegator delegates all calls to the original ComponentAccessor implementation. Only ComponentAccessor#setRequestFocusController is changed to keep our RequestFocusController implementation. I have just filled a RFE on http://bugreport.java.com/bugreport Thanks Reto Merz On 11/04/16 21:02, Alexander Scherbatiy wrote: > Hello Reto, > > Could you provide use cases which illustrate tasks the requested API is > intended to solve in your application? > > Please, also create a request in the bug system > http://bugreport.java.com/bugreport > > Thanks, > Alexandr. > >> On 11/04/16 12:26, Alexander Scherbatiy wrote: >> >> Resending the request to awt-dev alias. >> >> Thanks, >> Alexandr. >> >> On 4/4/2016 4:54 PM, Reto Merz wrote: >>> Hello, >>> >>> Jigsaw will disallow access to internal packages. >>> We have written a complex validation and focus management >>> implementation for our closed-source RIA and maintain it since JRE >>> 1.4. >>> >>> For this we use some internal API. We have a custom implementation of >>> these interfaces: >>> >>> sun.awt.RequestFocusController >>> sun.awt.AWTAccessor.ComponentAccessor >>> >>> And use this getter and setter: >>> >>> sun.awt.AWTAccessor#setComponentAccessor(AWTAccessor.ComponentAccesso >>> r) >>> sun.awt.AWTAccessor#getComponentAccessor() >>> sun.awt.AWTAccessor.ComponentAccessor#setRequestFocusController(Reque >>> stFocusController) >>> >>> >>> Please make this API public. >>> >>> Furthermore we need to call >>> java.awt.Component#revalidateSynchronously(). >>> We do this with reflection. It would be nice to have a public API for >>> this. >>> Maybe a new static method on AWTAccessor: >>> AWTAccessor.revalidateSynchronously(Component) >>> >>> Best Regards >>> Reto Merz >>> >>
RequestFocusDemo.java
Description: Binary data