Supporting the Mac OS menubar in JavaFX
Sven Reimers
sven.reimers at gmail.com
Sun Dec 11 06:17:30 PST 2011
Hi,
this may well be off topic, but Mac OS is not the only system using
now a MenuBar at the top - Ubuntu does this as well in latest release.
So is this effort only for Mac OS or should we take other systems into
account as well?
Thanks
Sven
On Sat, Dec 10, 2011 at 12:32 PM, Dr. Michael Paus <mp at jugs.org> wrote:
> Hi,
> I agree with Zonski that there is more to look at than just the menu bar. In
> order
> to get some ideas it might be interesting to look at what apple or others
> recommend now for making Swing apps look more native on MacOS.
>
> A good introduction can be found here:
> <http://www.devdaily.com/apple/mac/java-mac-native-look/java-on-mac.shtml>
>
> Going through this document you will see that there are more things that we
> should
> consider which go beyond the pure placement of the menu bar.
>
> Michael
>
>
> Am 10.12.2011 05:46, schrieb Daniel Zwolenski:
>
>> Can I throw a few more bigger picture things into the murky puddle of OS
>> menu bars and integration. I'm not saying these are all directly related
>> to
>> the problem at hand or even are things JFX should be solving, but I think
>> floating them past the think tank in the context of this conversation is
>> not an unhealthy thing to do:
>>
>> * In windows 7 (and possibly other versions, not sure), if I right click
>> on
>> the icon in the task bar it gives me an application-specific menu, which I
>> think is not completely dissimilar in usage to the application-level Mac
>> toolbar options (i.e. the ones that are left after you close all the
>> windows).
>>
>> * Windows also has the 'system tray' thing for 'background-style'
>> applications. Right-clicking on an icon in this brings up another menu
>> that
>> is application related.
>>
>> * OS variations are not the only issue. There is Applet vs Application to
>> think about. This whole toolbar thing is only relevant in true desktop
>> apps
>> (as far as I can see) so Applets (even on Mac) need to have their rules
>> defined.
>>
>> * iPhone/iPad and Android all have their own 'os' specific menu systems
>> that are similar but not completely the same as the mac window. If the
>> mobile support for JavaFX happens (please, please, please), then a menu
>> API
>> will be needed for this that doesn't look totally dissimilar to the mac
>> one
>> again. Over-future proofing can be a problem, but being generally aware of
>> likely future directions can be healthy. In Android it is the 'options
>> menu' http://developer.android.com/guide/topics/ui/menus.html and in
>> iPhone/iPad it is the 'navigation toolbar'
>>
>> http://developer.apple.com/library/IOs/#featuredarticles/ViewControllerPGforiPhoneOS/NavigationControllers/NavigationControllers.html#//apple_ref/doc/uid/TP40007457-CH103-SW4
>>
>>
>>
>> As I said, just food for thought rather than direct issues in need of
>> solutions.
>>
>>
>> On Sat, Dec 10, 2011 at 1:55 PM, Jim Graham<james.graham at oracle.com>
>> wrote:
>>
>>> Could the classes be copied to javafx.application, the old classes made
>>> into empty subclasses of the copies, and then the signatures on the
>>> methods
>>> that accepted them be relaxed to the supertype? (Possibly might have to
>>> have duplicate methods if that isn't binary compatible?)
>>>
>>> ...jim
>>>
>>>
>>> On 12/9/2011 5:57 PM, Richard Bair wrote:
>>>
>>>> Ya, that's the bummer. We exactly designed the menus for the exact usage
>>>> Jim describes, but didn't put them in a suitable package for
>>>> modularization. Drat!!!
>>>>
>>>> On Dec 9, 2011, at 4:38 PM, Jonathan Giles wrote:
>>>>
>>>> Just as a further data point to what Jim is saying: the
>>>>>
>>>>> javafx.scene.control.Menu* classes (MenuItem, and subclasses Menu,
>>>>> RadioMenuItem, CheckMenuItem, CustomMenuItem and SeparatorMenuItem) are
>>>>> not
>>>>> actually Controls. The only Menu* class that is a Control is MenuBar.
>>>>>
>>>>> From this perspective, it is actually unfortunate that these
>>>>> non-Control classes actually live in javafx-ui-control, as they may be
>>>>> totally suitable in the abstract sense that Jim discusses.
>>>>>
>>>>> --
>>>>> -- Jonathan
>>>>>
>>>>>
>>>>>
>>>>> On Saturday, 10 December 2011 10:19:00 a.m., Jim Graham wrote:
>>>>>
>>>>>> If this was simply a skinning technique of "moving the Stage's menubar
>>>>>> to the screen's menubar" that works if you have a window open, but it
>>>>>> doesn't solve the problem of what happens when you have no windows
>>>>>> open when Mac applications typically still manifest menus in the
>>>>>> screen menubar.
>>>>>>
>>>>>> Sticking a "separate but equal" menubar somewhere would lead to
>>>>>> applications failing to look like native Mac apps until the developers
>>>>>> are made aware of the issues and require "extra" coding to deal with
>>>>>> Mac deployment.
>>>>>>
>>>>>> If we could provide a way to specify:
>>>>>>
>>>>>> - Here are the menubar items that apply to all windows.
>>>>>> - Here are the additional menubar items that apply to a specific
>>>>>> window.
>>>>>> - To be most flexible, the "additional items" might have to be
>>>>>> additional items in the top-level menus that were specified for all
>>>>>> windows
>>>>>> - Would there also be a need to specify "but not these items" for some
>>>>>> windows to delete some items that only make sense when no windows are
>>>>>> open?
>>>>>>
>>>>>> Then it would be both an API for letting the runtime know which
>>>>>> menubar items should remain after the last window closes on Mac, and a
>>>>>> way to be able to populate lots of window menubars when an application
>>>>>> has multiple windows.
>>>>>>
>>>>>> The actual manifestation of the menubar would be a control, but the
>>>>>> specification of what items are needed could be in an independent
>>>>>> format that doesn't bring in a whole new package. We could create
>>>>>> skeleton "menu-ish-bar-ish-item" classes in the application package
>>>>>> and those could be the data that the Menu* controls take, but one
>>>>>> could attach a list of those to an Application object without having
>>>>>> Application depend on controls. A Stage could then take an additional
>>>>>> list and combine it with the list on the Application to make the full
>>>>>> menu bar list which is then skinned by the controls.
>>>>>>
>>>>>> When no windows are open, then the Mac-specific application could
>>>>>> still skin them in a native skin and deploy them on the screen
>>>>>> menubar, or have a hidden dependency on the controls for that platform
>>>>>> only.
>>>>>>
>>>>>> That's a fairly loose conceptual hand-waving outline, but maybe it
>>>>>> could dislodge a more concrete design from someone more familiar with
>>>>>> how all of those objects interact?
>>>>>>
>>>>>> ...jim
>>>>>>
>>>>>> On 12/9/2011 3:46 PM, steve.x.northover at oracle.com wrote:
>>>>>>
>>>>>>> Many toolkits have supported portabilitly between Mac and Windows
>>>>>>> (and
>>>>>>> other operating systems that put the menu bar in the window) by
>>>>>>> swapping
>>>>>>> the menu bar on stage focus in and out. This is what SWT does.
>>>>>>> Recently,
>>>>>>> an app wide menu bar was added to support the Mac.
>>>>>>>
>>>>>>> Steve
>>>>>>>
>>>>>>> On 09/12/2011 6:34 PM, Tom Schindl wrote:
>>>>>>>
>>>>>>>> [...]
>>>>>>>>
>>>>>>>>
>>>>>>>>> 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.
>>>>>>>>>
>>>>>>>> Well the menu changes definately based upon the focused top-level
>>>>>>>> window. So I'm quite sure the MenuBar has to be specified on the
>>>>>>>> Stage
>>>>>>>> not?
>>>>>>>>
>>>>>>>> I'm wondering though how you'd like to support all the themeing
>>>>>>>> stuff
>>>>>>>> one is able to apply on menus/menuitems on OS-X.
>>>>>>>>
>>>>>>>> IIRC I recently read in a mail from Mike Swingler that one can
>>>>>>>> implement
>>>>>>>> arbitary Java Drawing post-Leopard but I'm not sure that matches the
>>>>>>>> OS-X Menubar idea and all the fancy things one can do with JavaFX.
>>>>>>>>
>>>>>>>> Tom
>>>>>>>>
>
>
> --
> --------------------------------------------------------------------------------------
> Dr. Michael Paus, Chairman of the Java User Group Stuttgart e.V. (JUGS).
> For more information visit www.jugs.de.
>
--
Sven Reimers
* Senior System Engineer and Software Architect
* NetBeans Dream Team Member: http://dreamteam.netbeans.org
* NetBeans Governance Board Member: http://netbeans.org/about/os/governance.html
* Community Leader NetBeans: http://community.java.net/netbeans
Desktop Java:
http://community.java.net/javadesktop
* Duke's Choice Award Winner 2009
* Blog: http://nbguru.blogspot.com
* XING: https://www.xing.com/profile/Sven_Reimers8
* LinkedIn: http://www.linkedin.com/in/svenreimers
Join the NetBeans Groups:
* XING: http://www.xing.com/group-20148.82db20
* NUGM: http://haug-server.dyndns.org/display/NUGM/Home
* LinkedIn: http://www.linkedin.com/groups?gid=1860468
http://www.linkedin.com/groups?gid=107402
http://www.linkedin.com/groups?gid=1684717
* Oracle: https://mix.oracle.com/groups/18497
More information about the openjfx-dev
mailing list