On Tue, 4 Feb 2025 15:13:31 GMT, Michael Strauß <mstra...@openjdk.org> wrote:

>> When binding the promptTextProperty of a TextInputControl (TextField or 
>> TextArea) to a text that contains linebreaks/newlines ("\n") the "bind" call 
>> causes a RuntimeException to be thrown, the solution to it is to unbind 
>> before calling the set(txt) method to set the new value for the property.
>> Also added tests to test this new fix
>
> In my opinion, both the original implementation, as well as the proposed fix, 
> are defective.
> 
> The implementation seems to try to enforce the (undocumented) invariant that 
> the prompt text cannot contain line breaks. If that is indeed a sensible 
> invariant, then the property should reject any attempt to set an invalid 
> value by throwing an exception. Silently changing the property value is 
> unexpected for developers.
> 
> However, it doesn't seem to me that this is a sensible invariant. 
> `TextFieldSkin` and `TextAreaSkin` render the prompt text with a `Text` node, 
> which doesn't have a single-line restriction. Simply not doing anything to 
> the prompt text would be a good choice. Another good choice would be to clean 
> up the prompt text where it is used (i.e. in `TextFieldSkin` and 
> `TextAreaSkin`). We already do this in other places, for example in 
> `LabeledSkinBase::getCleanText`.

@mstr2 you bring a good point: the behavior (removing newlines) is 
undocumented, and it should be.

I propose to do this in a separate issue, more specifically in 
https://bugs.openjdk.org/browse/JDK-8335547 which intends to remove the 
filtering for `TextArea` since that controls is capable of displaying 
multi-line prompts (and `TextField`/`PasswordField` are not)

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

PR Comment: https://git.openjdk.org/jfx/pull/1694#issuecomment-2634407246

Reply via email to