JEP 253: UI control skins and input mapping discussion
jonathan.giles at oracle.com
Thu Aug 6 23:07:39 UTC 2015
As you might be aware, JEP 253 is all about getting private JavaFX UI
control and CSS APIs out into the public. You can read all about JEP 253
at . This JEP is split into three sub-projects:
1) Make UI control skins into public APIs
2) Improve support for input mapping
3) Review and make public relevant CSS APIs
Today I'm posting a first javadoc that contains a proposed set of API
for project 1) and 2). The javadoc for project 3) will come in a week or
two, once it is closer to completion. You can find the javadoc for the
first two projects at .
In this javadoc you'll see three packages. Here's a few brief comments:
1) javafx.scene.control: This package is unchanged. It is only here for
completeness (so you can compare control classes to skin classes).
2) javafx.scene.control.skin: This package is entirely new. It consists
of many of the classes that previously inhabited
com.sun.javafx.scene.control.skin. Look closely at the skin classes you
are interested in - almost all classes do not resemble their original
form. This is because up until now, skin classes have never been
considered public API, and as such not much was done to ensure a sane
API. With JDK 9 this changes, and so the amount of API on each class is
significantly less than what existed previously. We will take the normal
approach of growing the API as demand is shown - so if something is
missing, please comment ASAP!
3) javafx.scene.input: This package contains just the new classes as
part of this JEP. In general the classes here are the most preliminary
of the bunch - they are likely to go under the most change between now
and JDK 9 being released. Please review and comment.
The primary implementation change is that whilst Skins are mostly
unchanged, they handle behaviors differently than now. Input mappings
are now created by the skin and installed on the control. It is
conceivable that in a future release these behaviors will themselves
become public API, but for JEP 253 that is out of scope.
There are still a few things to be thought through:
1) How to document the available input mappings so they can be easily
searched for at runtime (javadoc? Java API?)
2) Controls have an empty inputMap until skin is instantiated - this
means manipulating the mappings can't happen as soon as the control is
3) No plan on how this might support Action-style API in the future.
4) There is no API to access context menus in controls such as TextField
(to add / remove functionality).
I look forward to any feedback you may have. Feel free to email me on-
or off- list.
More information about the openjfx-dev