Handling Enter key presses on Buttons in JavaFX

Jonathan Giles jonathan.giles at oracle.com
Tue Jun 7 21:47:11 UTC 2016


Hi all,

One thing I've been looking into recently is the issue of what the Enter 
key should do when it is pushed with regards to buttons in a UI where 
one of those buttons is a 'default' button. There are number of Jira 
issues on this topic, and I wanted to poll the community to understand 
its opinions.

The current situation is that the Enter key does not fire the focused 
Button. The Enter key is reserved for firing the 'default' Button in the 
UI (i.e. if someone has created a Button instance with the default 
property set to true). A default button is rendered slightly differently 
(in Modena it is blue for example). To fire the focused Button, the user 
must press the Space key.

Tom Schindl filed a bug (JDK-8139510) that is a good example of the 
'problem' this creates. In the bug report, a dialog is shown to the 
user. In the dialog is an OK button and a Cancel button. The OK button 
has been made the 'default' button. Regardless of which button has 
focus, the Enter key always fires the OK button. The only way to fire 
the Cancel button is via the Space key. This can be very confusing for 
users who have tabbed specifically to the 'Cancel' button and then 
pressed the Enter key, only to find they unwittingly fired the 'OK' action.

To me this has always been a little counter-intuitive, because of my 
heritage as a long-time Windows user. I believe Linux is much the same 
as Windows. For others who grew up on Mac, I'm less sure on what people 
expect (but it seems to be that the Enter key fires the default button, 
not the focused button, i.e. JavaFX current behavior matches what is 
expected on OS X).

What I'm proposing we do is to change the behavior as follows:

1) On OS X we do not change behavior at all - we keep the current 'Enter 
means default' and 'Space means focus' semantics.

2) On non-OS X platforms, we change the behavior so that Enter (and 
Space) will fire the _focused_ key, if one is focused. If no Button is 
focused (e.g. focus is in a TextField, etc), then Enter will work as it 
currently does and fire the default button, if one is specified. In 
short, default buttons will still be rendered blue to hint to the user 
that they are the default button, but they will be less prevalently 
fired by Enter key presses - only when they also have focus.

The two questions that I have are:

1) Will this confuse users when there is a behavior change (and 
presumably, this change will be made in JDK 9 and not backported to JDK 
8). If it will confuse users, is it still the right thing to do?

2) Do we want to have different behaviors for OS X and non-OS X? I'm a 
newly inducted member into the cult of Mac, and I don't yet have all my 
bearings sorted out, so I don't have a strong opinion here.

Your thoughts, as always, are appreciated.
-- Jonathan


More information about the openjfx-dev mailing list