Details
-
Enhancement
-
Resolution: Duplicate
-
P3
-
8
Description
http://mail.openjdk.java.net/pipermail/openjfx-dev/2012-December/004685.html
Mark Claassen proposed an API that seemed really simple and straightforward and allowed developers to add filtering capabilities very easily to TextInputControls. Here is the idea:
> Add the following sub-interface to the Content interface. No methods are
> added to the Content interface.
> interface Filter {
> String filter(int index, String text, String currentContent);
> }
>
> Add the following to TextFieldContent and TextAreaContent:
> private Content.Filter filter;
> public void setContentFilter(Content.Filter filter) {
> this.filter = filter;
> }
>
> Change the "insert" method of TextFieldContent and TextAreaContent to start
> with:
> @Override public void insert(int index, String text, boolean
> notifyListeners) {
> text = TextInputControl.filterInput(text, [boolean], [boolean]);
> if (filter != null)
> text = filter.filter(index, text, get());
>
> Add a method in TextField:
> public void setContentFilter(Content.Filter filter) {
> ((TextFieldContent)getContent()).setContentFilter(filter);
> }
>
> Add a method in TextArea:
> public void setContentFilter(Content.Filter filter) {
> ((TextAreaContent)getContent()).setContentFilter(filter);
> }
>
> This would do a few things:
> 1) Use the current "TextInputControl.filterInput" mechanisms of TextField
> and TextArea (like to strip out special chars and newlines).
> 2) By specifying the Filter interface outside of TextField and TextArea, it
> allows the same filter to be used for TextField and TextArea
> 3) Makes it simple to do things like translate all input to upper case or
> limit the overall length
> 4) By not adding a method to Content directly, something like the
> InputMaskContent would not be forced to deal with the Filter interface at
> all.
>
> This implementation would allow someone creating a filter to "filter" the
> text to have illegal characters. I thought it was more validate this
> first, so that the implementer would only have to deal with proper input.
> However, TextInputControl.filterInput could be done both before and after
> the Filter.filter() call.
> text = TextInputControl.filterInput(text, [boolean], [boolean]);
> if (filter != null) {
> text = filter.filter(index, text, get());
> text = TextInputControl.filterInput(text, [boolean],
> [boolean]);
> }
>
> Another possible addition to this may be to allow the filter to return
> null, signifying an error input and causing the system to "beep".
Mark Claassen proposed an API that seemed really simple and straightforward and allowed developers to add filtering capabilities very easily to TextInputControls. Here is the idea:
> Add the following sub-interface to the Content interface. No methods are
> added to the Content interface.
> interface Filter {
> String filter(int index, String text, String currentContent);
> }
>
> Add the following to TextFieldContent and TextAreaContent:
> private Content.Filter filter;
> public void setContentFilter(Content.Filter filter) {
> this.filter = filter;
> }
>
> Change the "insert" method of TextFieldContent and TextAreaContent to start
> with:
> @Override public void insert(int index, String text, boolean
> notifyListeners) {
> text = TextInputControl.filterInput(text, [boolean], [boolean]);
> if (filter != null)
> text = filter.filter(index, text, get());
>
> Add a method in TextField:
> public void setContentFilter(Content.Filter filter) {
> ((TextFieldContent)getContent()).setContentFilter(filter);
> }
>
> Add a method in TextArea:
> public void setContentFilter(Content.Filter filter) {
> ((TextAreaContent)getContent()).setContentFilter(filter);
> }
>
> This would do a few things:
> 1) Use the current "TextInputControl.filterInput" mechanisms of TextField
> and TextArea (like to strip out special chars and newlines).
> 2) By specifying the Filter interface outside of TextField and TextArea, it
> allows the same filter to be used for TextField and TextArea
> 3) Makes it simple to do things like translate all input to upper case or
> limit the overall length
> 4) By not adding a method to Content directly, something like the
> InputMaskContent would not be forced to deal with the Filter interface at
> all.
>
> This implementation would allow someone creating a filter to "filter" the
> text to have illegal characters. I thought it was more validate this
> first, so that the implementer would only have to deal with proper input.
> However, TextInputControl.filterInput could be done both before and after
> the Filter.filter() call.
> text = TextInputControl.filterInput(text, [boolean], [boolean]);
> if (filter != null) {
> text = filter.filter(index, text, get());
> text = TextInputControl.filterInput(text, [boolean],
> [boolean]);
> }
>
> Another possible addition to this may be to allow the filter to return
> null, signifying an error input and causing the system to "beep".
Attachments
Issue Links
- duplicates
-
JDK-8097928 Add Formatted TextField control
- Resolved
- relates to
-
JDK-8098302 Add Spinner Control
- Resolved
-
JDK-8097928 Add Formatted TextField control
- Resolved
-
JDK-8103256 Inspector Editors Error Checking
- Resolved