<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
I also am skeptical regarding the need for API in the core platform
to support this.<br>
<br>
-- Kevin<br>
<br>
<br>
<div class="moz-cite-prefix">On 3/27/2023 9:46 AM, Andy Goryachev
wrote:<br>
</div>
<blockquote type="cite" cite="mid:DM5PR1001MB2172540FD6FE207B586EE759E58B9@DM5PR1001MB2172.namprd10.prod.outlook.com">
<meta name="Generator" content="Microsoft Word 15 (filtered
medium)">
<style>@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}@font-face
{font-family:"Times New Roman \(Body CS\)";
panose-1:2 11 6 4 2 2 2 2 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:10.0pt;
font-family:"Calibri",sans-serif;}span.EmailStyle19
{mso-style-type:personal-reply;
font-family:"Courier New";
color:windowtext;}.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}div.WordSection1
{page:WordSection1;}</style>
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New"">I
think this functionality belongs to the application-level
code, not in the platform. It's the application that knows
which parts of a form need the visual feedback and which do
not. In my opinion, there is no APIs that are missing in
order to implement a validation framework of any level of
complexity.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New"">Not
responding to programmatic changes is easy: disable
validation logic when setting values.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New"">The
validation and subsequent user feedback may happen at the
time of form submission, or as a result of a short timer
expiring. The timer should be restarted upon each update of
the value properties being validated.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New"">In
any case, this problem has a well-defined solution and, in
my opinion, does not require a change in the core platform.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New"">Cheers,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New"">-andy<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF
1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;color:black">From:
</span></b><span style="font-size:12.0pt;color:black">openjfx-dev
<a class="moz-txt-link-rfc2396E" href="mailto:openjfx-dev-retn@openjdk.org"><openjfx-dev-retn@openjdk.org></a> on behalf of Michael
Strauß <a class="moz-txt-link-rfc2396E" href="mailto:michaelstrau2@gmail.com"><michaelstrau2@gmail.com></a><br>
<b>Date: </b>Sunday, March 26, 2023 at 17:49<br>
<b>To: </b>openjfx-dev <a class="moz-txt-link-rfc2396E" href="mailto:openjfx-dev@openjdk.org"><openjfx-dev@openjdk.org></a><br>
<b>Subject: </b>Allow input controls to indicate
significant user interaction<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt">Many
form-based applications require some sort of data
validation for<br>
input controls. It is also often desirable to visualize
the validation<br>
state of a control directly in the user interface, for
example by<br>
showing a red border to indicate a validation failure.<br>
<br>
However, simply validating the current value of a control
and<br>
rendering a validation decorator often leads to an
undesirable user<br>
experience: for example, in many cases an empty form field
shouldn't<br>
indicate a validation failure unless the user has
significantly<br>
interacted with the field, or validation was explicitly
requested by<br>
pressing a "submit" button.<br>
<br>
The first of these validation conditions, "significantly
interacted<br>
with the input control" is quite popular on contemporary
web forms,<br>
and offers a balanced user experience compared to
immediately and<br>
eagerly validating every control, or delaying validation
until the<br>
very end of the form submission process (see also the
proposed<br>
:user-valid/:user-invalid CSS pseudo-classes).<br>
<br>
Unfortunately, this is very hard to implement in JavaFX
since controls<br>
have no way of signalling when they were significantly
interacted<br>
with. In particular, we don't want to count programmatic<br>
initialization of field values as a significant
interaction. What<br>
constitutes a significant interaction is dependent on the
type of<br>
input control. For example, a text field might define a
significant<br>
interaction as the sequence of gaining focus, receiving a
new text<br>
value, and losing focus. A slider might define a
significant<br>
interaction as the sequence of pressing the mouse button,
dragging the<br>
slider thumb to a new value, and releasing the mouse
button.<br>
<br>
The information of how an input control changed its value
is only<br>
really knowable by its skin and associated behavior
classes, both of<br>
which are basically black boxes for a JavaFX application.
In order to<br>
expose this information, I propose to add the following
new interface<br>
in the "javafx.scene.input" package:<br>
<br>
public interface InputNode {<br>
ReadOnlyBooleanProperty userModifiedProperty();<br>
boolean isUserModified();<br>
void setUserModified(boolean value);<br>
}<br>
<br>
This interface identifies a node that can receive user
input. It is<br>
implemented by the following controls: ButtonBase,
ChoiceBox,<br>
ComboBoxBase, Slider, Spinner, and TextInputControl.<br>
<br>
The associated skins and behaviors are modified to invoke<br>
setUserModified(true) on the control when a significant
user<br>
interaction is detected. Once this flag is set on a
control, it can<br>
only be unset programmatically from application code by
invoking<br>
setUserModified(false).<br>
<br>
You might note that userModifiedProperty() returns<br>
ReadOnlyBooleanProperty, while a public setter is
availabe. The reason<br>
for this is that while applications should be able to set
or clear the<br>
userModified flag programmatically, they shouldn't be able
to bind the<br>
property to prevent it from being set by skins.<br>
<br>
Note also that it is not a goal of this proposal to add a
data<br>
validation framework to JavaFX (this is best left to
third-party<br>
libraries instead). The goal is to expose a crucial piece
of<br>
information that is not easily accessible otherwise.<br>
<br>
I'm interested on your thoughts on this idea.<o:p></o:p></span></p>
</div>
</div>
</blockquote>
<br>
</body>
</html>