[External] : KeyCodeCombination

John Hendrikx john.hendrikx at gmail.com
Wed Nov 29 23:26:05 UTC 2023


Hi Andy and List,

I did some checking on the internal KeyBinding, and I think it has a 
broken hashCode/equals implementation, which if used as part of a map (I 
think they aren't currently) would mean it won't find always find the 
correct (or any) match with a simple Map#get.

This is because the hashCode for modifiers returns unique values for 
TRUE, FALSE and ANY, but equals accepts that ANY can match TRUE or 
FALSE.  So, if you look up a binding, the hash code generated may not be 
the same for a binding for the same KeyCode depending on the modifier 
state, even though equals would consider it matching -- the map would 
then look in the wrong bucket, and may miss the match.

Therefore, I simpy only put KeyCode in a Map as key, then do further 
specific checking for modifiers.

I haven't checked your implementation, but it might be something you 
need to be aware of.

Anyway, as I lookup by KeyCode, and then look through a list for which I 
call KeyCodeCombination#match, I have no problems reusing 
KeyCodeCombination.

--John

On 30/11/2023 00:09, Andy Goryachev wrote:
>
> The rationale was this: I wanted KeyBinding to be a key in a hash 
> map.  KeyCodeCombination cannot be used as keys since they might 
> correspond to multiple key combinations, as far as I can tell.  Also, 
> it would necessitate the use of a linear search in some cases.
>
> I did not like the internal KeyBinding as it wasn’t convenient enough 
> for my taste.  I wanted something that can be easily created.  There 
> were some early ideas about coding platform specificity into the KB, 
> but either you or Michael mentioned that this isn’t really necessary. 
> KeyBinding also deals with shortcut, meta, and option modifiers to get 
> what I want.
>
> Can I copy my response to the list?
>
Sorry, I copied it now.

--John

> Cheers,
>
> -andy
>
> *From: *John Hendrikx <john.hendrikx at gmail.com>
> *Date: *Wednesday, November 29, 2023 at 14:57
> *To: *Andy Goryachev <andy.goryachev at oracle.com>
> *Subject: *[External] : KeyCodeCombination
>
> Hi Andy,
>
> I think you mentioned there was a reason for introducing a new
> KeyBinding type class (or at least copying part of the internal one).
>
> I've used KeyCodeCombination now, and this seems to do everything I
> really want (including having a `match` method that can match it against
> a KeyEvent).
>
> What were problems you encountered using this class, or what was the
> reasoning for introducing a new class for key bindings?
>
> --John
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20231130/cd9147e8/attachment-0001.htm>


More information about the openjfx-dev mailing list