Handling Enter key presses on Buttons in JavaFX

Jonathan Giles jonathan.giles at oracle.com
Tue Jun 7 22:07:48 UTC 2016


It's worth me quickly interjecting here to say that a button being 
default does not automatically imply that the button has the focus by 
default. Therefore, this suggestion is another behavioral change that 
needs to be carefully understood.

-- Jonathan

On 8/06/16 10:04 AM, Tomas Mikula wrote:
> 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 <mailto: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