Focus delegation API

Michael Strauß michaelstrau2 at gmail.com
Tue Nov 12 19:42:49 UTC 2024


Responding to Nir's questions in this thread.

> I'd like to understand the focus and event handling problem better. If I have a focused TextField, all key events go to it. If I have a Spinner, which is a TextField with 2 Buttons, it is focused as a single unit and consumes key events whether they are aimed at the text field or the buttons (I assume the buttons handle arrow up/down keys?). If I have a ClolorPicker, it is not focused as a single unit - it has sliders, buttons, text fields and other things, which can be focused individually.
>
> What I'm trying to find out is what is "the primitive" in the focus/event handling plan. A TextField and a Spinner are treated as primitives, but a ColorPicker and a DatePicker are not. Where does the line pass? If I'm a controls author, can I create a Spinner that allows focusing/event-handling the text field and the buttons separately, like ColorPicker allows? In this case, Spinner is not a "primitive" control.


I would say that the line is wherever you draw it. Some controls are
monoliths, some are composites, some are a mixture of both.

Think of Button: it has a user-configurable `graphic` property that
accepts any Node, and both are independently focusable.

You can imagine creating a control that is mostly a monolith (like
Spinner), but has a "hole" that can be filled with any content by
users.

The proposed focus delegation API allows you to do any of that.


More information about the openjfx-dev mailing list