> On Aug 6, 2025, at 3:54 PM, John Hendrikx <john.hendr...@gmail.com> wrote:
> 
> 
> On 06/08/2025 18:06, Martin Fox wrote:
>> 
>> The TextField of a ComboBox or Spinner is not just an artifact of its skin. 
>> They are both explicitly composite controls that contains a TextField 
>> inside. It’s part of the API. And if you were to install some filters on the 
>> Scene to track Key and InputMethod events you could easily conclude that 
>> that TextField is the focus owner (it walks like the focus owner, it quacks 
>> like the focus owner).
> 
> I disagree.  A ComboBox and Spinner are primitives.  Their
> implementation via replacable Skins may or may not use a TextField,
> that's completely up to the Skin.

As I mentioned in my earlier e-mail (in the paragraph you quoted) the TextField 
is part of the ComboBox and Spinner API. Accessing it is the only way to, say, 
attach a TextFormatter to a Spinner. Consult the docs starting at version 2.2.

The proposal (lifted from WPF) is to provide a mechanism which would allow a 
Control to replace an event’s original target with itself. This is a low-cost 
way of making the control appear to be a black box at the event level. It would 
certainly have a lower cost than, say, trying to hide skin nodes from the rest 
of the scene graph. I’m not aware of any toolkit that even attempts that.

> - Skins re-use listener and event handler endpoints on the Control,
> leaving users baffled by events sometimes being consumed before they see
> them (if they added their handler late) or after they see them (if they
> were the first to add their handler, or if the Skin was replaced causing
> a re-ordering -- something very interesting to deal with); for listeners
> this is relatively safe, as they don't have a consumption mechanism, but
> not for events --  another mistake; skin event handlers should have been
> part of a separate list so there can never be any intermixing of user
> and skin event handlers

This is a known pain point for developers that can be fixed without re-writing 
the underpinnings of JavaFX (in other words, with a reasonable cost/benefit 
ratio). I’m not sure why it hasn’t been done already.

Martin

Reply via email to