Supporting the Mac OS menubar in JavaFX

Jonathan Giles jonathan.giles at
Fri Dec 9 15:28:33 PST 2011

My understanding, from an incredibly 
haven't-been-involved-in-the-discussion high-level, is that there will 
be API exposed at the Toolkit level [1], which would not be based 
around javafx.scene.control.Menu* classes. It would be a requirement 
for the controls team to convert from javafx.scene.control.Menu* to the 
relevant native menu bar API. We would lose some functionality along 
the way (CustomMenuItem would probably not be supported at all in 2.1)


-- Jonathan

On Saturday, 10 December 2011 9:24:19 a.m., 
steve.x.northover at wrote:
> I'm wondering about the ability to support the native menu bar and 
> expose all of the functionality of JavaFX using the existing menu bar 
> classes. Most operating systems provide a custom draw capability but 
> it is quite limited and unlikely to respond well to a scene graph 
> based widget toolkit like JavaFX.
> I suspect strongly that we will need new classes to model the native 
> menu bar ... but I would love to be wrong.
> Steve
> On 09/12/2011 6:18 PM, Richard Bair wrote:
>> Hi Jonathan,
>> There is one other problem, which is modularity. Having Application 
>> or Stage know about javafx.scene.control package would mean a new 
>> dependency. What about the idea that the MenuBarSkin either shows 
>> itself, or doesn't, based on OS? And hoists the contents into the Mac 
>> menu bar when needed?
>> Richard
>> On Dec 9, 2011, at 2:56 PM, Jonathan Giles wrote:
>>> Hi all,
>>> One of the things we're planning to support in JavaFX 2.1 is the 
>>> native Mac OS menubar. This email is intended primarily to discuss 
>>> the API one expects to see to set a MenuBar in the native Mac OS 
>>> menubar area. Your feedback is sought and will be very much 
>>> appreciated.
>>> The current thinking is that Application feels like the right place 
>>> to specify a global, application-wide javafx.scene.control.MenuBar 
>>> on. It could be assumed that if a developer were to set this 
>>> property, and the operating system upon which the end-user was 
>>> running the JavaFX application was Mac OS, that the menubar will be 
>>> displayed using the native Mac OS menubar. Of course, if a developer 
>>> wants a cross-platform look and feel, they could just place the 
>>> MenuBar in the stage as per usual and it would display as it 
>>> currently does. This approach opens up a number of questions and 
>>> issues:
>>> 1) What happens in the case of the end-user being on Windows? Is the 
>>> Application.MenuBar ignored, or is it automagically added to the 
>>> main Stage? (I would argue for totally ignoring it....but that leads 
>>> to the next point).
>>> 2) This approach means there needs to be operating specific code in 
>>> the UI to test whether a non-native MenuBar should be added (in the 
>>> case of Windows, for example). This starts to clutter the UI code, 
>>> and without careful consideration by the developer may result in 
>>> needing to duplicate their MenuBar code. Is there a better approach?
>>> Another place to specify a MenuBar would be on Stage, rather than 
>>> (or in addition to), Application. Having a MenuBar property on Stage 
>>> would allow for the MenuBar to change based on the currently focused 
>>> Stage - but I'm not certain this is desirable or even the expected 
>>> behaviour of Mac OS. Therefore, I'm thinking that this is not likely 
>>> to happen unless we hear otherwise.
>>> Like I said, we're at a very early exploration point in this 
>>> process. The controls team is very keen to hear feedback from the 
>>> community, as well as from the owners of the Application API, and 
>>> the Mac OS experts on this list.
>>> Thanks,
>>> -- Jonathan

More information about the openjfx-dev mailing list