On Thu, 31 Jul 2025 01:20:06 GMT, Michael Strauß <mstra...@openjdk.org> wrote:

> _Mailing list message from [Andy Goryachev](mailto:andy.goryac...@oracle.com) 
> on [openjfx-dev](mailto:openjfx-...@mail.openjdk.org):_
> 
> I think I narrowed down my objection to this proposal. My main problem with 
> it is that it tries to add properties to the wrong entity (Node).
> 
> In a typical application, the focus traversal requirements usually come in 
> the context of a higher level aggregate such as a form, or a panel, or a 
> window, and not the individual nodes. An example from Swing and AWT is the 
> FocusTraversalPolicy class. This is no accident - the focus traversal might 
> be dynamically dependent on other aspects of the UI state, for example the 
> kind of information already present in a form.

The reason Swing has a FocusTraversalPolicy is because its layout system is 
decoupled from focus traversal. Layout managers in Swing determine the 
positions of components but do not expose any information about a good 
traversal order of those components. As a result, the container has no built-in 
understanding of how focus should move between components based on layout.

So Swing needed a FocusTraversalPolicy because layout managers (although 
flexible) do not provide any inherent information on focus traversal order. In 
contrast, JavaFX integrate layout and focus order more tightly through 
hierarchical scene graphs, node ordering, and orientation (for some controls).  
In other words, there is more than enough ways to influence focus traversal 
order:

- Making logical groups which comes naturally with the various containers
- Adding nodes to containers in the desired focus order
- Leveraging disabled, visible, and focusTraversable properties for even more 
control

For instance, if a GridPane should traverse top-to-bottom rather than 
left-to-right, it’s simply a matter of adding the nodes in top-down order. 
JavaFX respects the order in which nodes are added, regardless of their visual 
grid positions.

So, I don't think grabbing this idea from Swing and adding it to FX can ever be 
the right solution as it was introduced there to solve a completely different 
problem (not using order of children + layout managers being decoupled and 
unable to confer focus traversal information).  If there are currently problems 
with FX's focus traversal order that can't easily be solved by using the 
existing tools (especially node order), that are common problems for users, 
then please share these, and let's see how these concerns can be addressed by 
enhancing what is already there instead of overriding it.  Perhaps a 
`Node.setViewOrder` type mechanism is needed, but for focus -- but I struggle 
to think why this couldn't be solved by simply moving the child in the correct 
position...

-------------

PR Comment: https://git.openjdk.org/jfx/pull/1632#issuecomment-3138313755

Reply via email to