RFR: 8301121: RichTextArea Control (Incubator) [v65]

Pascal duke at openjdk.org
Wed Jan 8 16:49:51 UTC 2025


On Wed, 8 Jan 2025 15:30:57 GMT, Andy Goryachev <angorya at openjdk.org> wrote:

>> modules/jfx.incubator.input/src/main/java/jfx/incubator/scene/control/input/KeyBinding.java line 46:
>> 
>>> 44:  * @since 24
>>> 45:  */
>>> 46: public class KeyBinding
>> 
>> There's also existing classes like `javafx.scene.input.KeyCodeCombination`, which have a different API. Will it increase maintenance burden and/or cause more friction for users to have two different APIs for a very similar purpose? Are there plans to consolidate these APIs in the future?
>
> Good question!
> 
> I've decided to create a new class for the incubator for two main reasons:
> 1. the only way to construct `KeyCombination` is from a `String`, which incurs the penalty of parsing 
> 2. `KeyCombination` does not differentiate key pressed / key released / key typed events
> 
> While 1) can be easily addressed by adding a Builder, introducing 2) may cause issues with the existing code, since `KeyCombination` is an existing public API.
> 
> Any suggestions?

`KeyCombination` is just the abstract base class. Subclasses like `javafx.scene.input.KeyCodeCombination` provide normal constructors without any parsing:


    public KeyCodeCombination(final @NamedArg("code") KeyCode code,
                              final @NamedArg("modifiers") Modifier... modifiers) { /* ... */ }


The abstract class provides a _match_ method which subclasses can (and do) override, so it could be possible to create a subclass that implements the method based on pressed/typed:


    @Override
    public boolean match(final KeyEvent event) {
        // KeyEvent has e.g. KEY_PRESSED and KEY_RELEASED, so should be possible to check here...
        return checkPressedReleasedTyped(event) && super.match(event);
    }

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1524#discussion_r1907491055


More information about the openjfx-dev mailing list