Handling Enter key presses on Buttons in JavaFX

Tomas Mikula tomas.mikula at gmail.com
Tue Jun 7 22:41:37 UTC 2016

On Tue, Jun 7, 2016 at 6:33 PM, Stefan Fuchs <snfuchs at gmx.de> wrote:

> Hi,
> well, if my dialog would include  a TextField, an cancel- and an
> ok-button, I would obviously want to have the TextField the initial focus.
> Once the dialog opens I can immediately type some text.
> When I'm done, I hit enter to confirm the dialog.
> To cancel the dialog i would hit escape.
> Therefor I would prefer the following behavior.
> If the focused control has an action handler attached (cancel-Button and
> ok-Button), enter should trigger its action.
> If the focused control has no action handler attached (TextField), the
> action of the default button should be triggered.

This would be very confusing if you had two TextFields and after entering
text into the first one the user hits Enter and the form gets submitted
with empty second field.

> Escape always triggers the action of the cancel-Button.
> Stefan
> What about forgetting the whole notion of a "default button" and the only
>> effect of setting the default property to true being that the button will
>> start as focused?
>> So I add a question:
>> 3) Would anyone miss the "default button"?
>> Tomas
>> On Tue, Jun 7, 2016 at 5:47 PM, Jonathan Giles <jonathan.giles at oracle.com
>> >
>> wrote:
>> 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