Yes, I think that's the best approach. I am working on some aspects of this internally and hopefully next year I can contribute some parts of that :-)
Felix On 10 December 2013 10:49, Scott Palmer <swpal...@gmail.com> wrote: > Well there is the option of doing some sort of application support library > in an external project first. Much like the ControlsFX stuff. > > If it works out, some aspects can be pulled into the JavaFX runtime at a > later date. > > Scott > On Dec 9, 2013 4:14 PM, "Felix Bembrick" <felix.bembr...@gmail.com> wrote: > >> Scott, I think the take-away here is that there simply aren't the >> features "out of the box" in JavaFX/Java (even with CSS, skins, FXML) to >> implement the best platform/UI abstraction and, given the various and >> vastly differing opinions of how this layer should work or look, I doubt >> that any "official" solution will ever be provided by Oracle. >> >> I guess that we all need to do what works for ourselves in this area >> which is admittedly unfortunate and undesirable... >> >> >> On 10 December 2013 07:49, Scott Palmer <swpal...@gmail.com> wrote: >> >>> I see the point of he higher-level abstraction, but I think we need more >>> control over the user experience than that for most cases. If not simply >>> for aesthetics, there are times when I know I want a combobox vs. a spinner >>> vs. a list with a single selection model. >>> >>> What we need are more of what we already have with things like: >>> >>> MenuBar.useSystemMenuBarProperty() >>> >>> or in Swing, MouseEvent.isPopupTrigger() >>> >>> Consider for example the standard shortcut for Undo. CTRL-Z on Windows, >>> Command-Z o Mac. That’s easy, Mac uses Command where Windows uses CTRL. >>> But what about Redo? CTRL-Y on Windows, Command-Shift-Z on Mac. >>> >>> Developers have to know these things and code for them explicitly. >>> Where is the abstraction in the Java APIs? >>> >>> Scott >>> >>> >>> On Dec 9, 2013, at 3:03 PM, Felix Bembrick <felix.bembr...@gmail.com> >>> wrote: >>> >>> > I am with you on the "design pattern" approach you refer to which is >>> > basically a higher level of abstraction than say one which actually >>> > specifies which widget types to use. >>> > >>> > But who is this "someone who loves the target platform" and how and >>> when do >>> > they get to hook-in the actual widgets? >>> > >>> > While I agree JavaFX certainly has the ability to implement the >>> high-level >>> > abstraction layer (as does pretty much any programming language, how >>> > (physically speaking) is someone going to link this with an actual >>> > selection of widgets on each OS? Isn't *that* the whole problem here? >>> > >>> > Felix >>> > >>> > >>> > >>> > On 10 December 2013 06:50, Stephen Winnall <st...@winnall.ch> wrote: >>> > >>> >> Just to take a completely different tack: I have a sneaking suspicion >>> that >>> >> the whole approach to UI design is wrong. Aside from the platform >>> >> abstraction thing, I wonder whether we shouldn’t be approaching UIs >>> from a >>> >> design pattern perspective. The application programmer is the wrong >>> person >>> >> to decide whether to implement a pop-up menu, a combobox or a >>> selection >>> >> list: all the programmer needs to specify is “get me one or more >>> elements >>> >> from this list”, and someone who loves the target platform (even >>> Windows >>> >> ;-) ) should instantiate the appropriate widget for that platform. >>> >> >>> >> JavaFX gives us the capability to do this. >>> >> >>> >> I think we tend to think of ourselves as clones of Leonardo da Vinci, >>> >> capable of programming and design, when the truth is somewhat >>> different, >>> >> the more so when we’re implementing stuff for platforms we secretly >>> >> despise… But now I’m ranting, sorry. >>> >> >>> >> To get back to cross-platform looks. People are used to them because >>> of >>> >> WWW and browser interfaces. But the desktop has no competitive >>> advantage >>> >> over the browser idiom if it doesn’t do the user experience better. >>> It’s a >>> >> question of quality as opposed to 80:20 in my view. It’s look AND >>> feel. >>> >> >>> >> Steve >>> >> >>> >> On 9 Dec 2013, at 18:42, Felix Bembrick <felix.bembr...@gmail.com> >>> wrote: >>> >> >>> >> Agreed that Quaqua did a great job and lets not lose sight of the fact >>> >> that I am totally praising the efforts of everyone who has worked in >>> this >>> >> frustrating and tedious area of UI development/support. I just think >>> the >>> >> obvious talents of those people could be utilised for a purpose less >>> likely >>> >> to drive them crazy! >>> >> >>> >> Yes, Metal was an unabridged disaster but did you ever see Substance? >>> I >>> >> thought that looked great on all platforms. And today there is also >>> Cezanne >>> >> which isn't too shabby. >>> >> >>> >> What's really needed is, as you say, some kind of platform abstraction >>> >> that handles all the OS specific details and then you code to use it. >>> >> Ideally this abstraction would result in the use of actual native >>> widgets >>> >> but how you would apply all the features that come with Node to those >>> >> widgets I have no idea... >>> >> >>> >> On 9 Dec 2013, at 22:49, Stephen Winnall <st...@winnall.ch> wrote: >>> >> >>> >> On 9 Dec 2013, at 03:18, Felix Bembrick <felix.bembr...@gmail.com> >>> wrote: >>> >> >>> >> @Stephen, you are absolutely right about this. But such an approach >>> (and >>> >> pretty much *any* approach) to "emulated" native look and feels is >>> fraught >>> >> with difficulties and complexities. >>> >> >>> >> Firstly, it will *never* be possible to completely emulate the native >>> look >>> >> and feel. And, even if the differences are subtle, there is the very >>> real >>> >> risk that the end user will have a very uneasy feeling using such a >>> look >>> >> and feel. At times it will even seem like an imposter. >>> >> >>> >> >>> >> Agreed, though Quaqua did quite a good (and unobtrusive) job for the >>> look >>> >> on Swing on Mac OS X. >>> >> >>> >> Secondly, you will be forever playing catchup as each new major >>> release >>> >> (and also even each minor update) changes one or more of the >>> behaviours >>> >> that you have so carefully emulated. The result is that for a while >>> at >>> >> least, your emulated look and feel is an even more obvious imposter >>> with an >>> >> even more uneasy experience for the user. >>> >> >>> >> >>> >> Indeed. I’m not really a fan of reimplementing something that’s >>> already >>> >> there anyway. It should be possible to use the native facilities via >>> >> appropriate APIs. >>> >> >>> >> Thirdly, building such emulated look and feels is a *lot* of work >>> (much >>> >> more than you would think). >>> >> >>> >> >>> >> Tell me about it :-) I spent a long time trying to create a Platform >>> >> abstraction for Swing which would allow applications to be moved from >>> >> platform to platform and adopt the native look and feel. The along >>> came >>> >> JavaFX. But we missed out on the chance of developing a platform >>> >> abstraction there too. >>> >> >>> >> My reasoning is: why bother? Why not build a "JavaFX look and feel" >>> (akin >>> >> to something like Nimubs in Swing) that simply doesn't even try to >>> look >>> >> native? Then you know for sure your app looks and behaves >>> identically on >>> >> all devices and there is no hint of "imposter-ness”. >>> >> >>> >> >>> >> The answer to this question is relatively simple: Metal. Metal, you >>> will >>> >> recall, was the one-size-fits-all look for Swing. And it was >>> <expletive >>> >> deleted> and was a major reason for the failure of Swing (and thus >>> Java) on >>> >> the desktop. >>> >> >>> >> Ultimately, all cross-platform looks suffer from the same problem: >>> they >>> >> don’t look right on any platform and often terrible on others. And >>> ignoring >>> >> the feel of the target platform is the ultimate sin: users don’t >>> understand >>> >> what the app is doing or why but often cannot articulate their >>> feelings >>> >> because there’s no *observable* problem, only a “feelable" one. And so >>> >> another Java desktop app dies the death... >>> >> >>> >> These days, many apps do not look 100% native and may have their own >>> >> controls or look and feel in general. Why not channel all that >>> massive >>> >> effort in constructing an emulated native look and feel into simply >>> making >>> >> JavaFX better overall? >>> >> >>> >> >>> >> Agreed. Let’s define a platform abstraction… >>> >> >>> >> Steve >>> >> >>> >> >>> >> >>> >>> >>