What can we expect from the JavaFX team in this regard in the future? I know we have talked about mixing lightweight and heavyweight controls in the same context but is it going to happen? Is this planned for JFX9 perhaps? Is it *really* even feasible?
> On 10 Dec 2013, at 4:55, Stephen F Northover <steve.x.northo...@oracle.com> > wrote: > > Today, you can only exercise the choice by writing native code and you face > heavyweight / lightweight issues depending on the platform and API. > > Steve > >> On 2013-12-09 12:31 PM, Felix Bembrick wrote: >> Stephen, I thoroughly agree that JavaFX is by far the best choice for >> non-native apps/widgets which is precisely my point. They are the kind of >> apps perfect for using JavaFX. >> >> But you refer to giving people the choice to go native where appropriate. >> How can I exercise that choice? Where is the support for native widgets in >> JavaFX? >> >> And isn't the real Holy Grail being able to mix native and non-native >> widgets in the same app with all features of Node being available to every >> widget, with all the effects and transforms, all the CSS/styling and with >> all the performance? >> >> Could JavaFX ever be such a toolkit? >> >>> On 10 Dec 2013, at 2:24, Stephen F Northover <steve.x.northo...@oracle.com> >>> wrote: >>> >>> Here are my thoughts on the matter. Give people the choice of whether to >>> use native or non-native components. In some applications, everything will >>> be non-native. In others, only the main content area will be non-native >>> and the rest will be native. In some mobile applications, perhaps the >>> preference pages will be native and other parts will not. >>> >>> JavaFX is the best choice for non-native widgets and we are committed to >>> making it the best toolkit all around. >>> >>> Steve >>> >>>> On 2013-12-09 9:49 AM, Scott Palmer wrote: >>>> I agree that perfect sync with native look and feels is not what is >>>> required and not worth the effort. I do think though that major concepts >>>> in the platform's look and feel should (must!) be followed or the user >>>> experience is ruined. >>>> >>>> The example of the order of the ok and cancel buttons has been brought up >>>> already. But that isn't even the most important one. >>>> >>>> Things like shortcut keys. CTRL-C to copy on windows, Command-C to copy on >>>> Mac. Standard menu layouts, right-click behaviour and standard context >>>> menus. They just have to be in the right place. That they look different >>>> doesn't matter as much. And this doesn't mean that you can't try new ideas >>>> for UI. But basic things that users expect to work should still work. >>>> E.g. Command-Q on OS X better quit the app :-) >>>> >>>> As noted already with my reference to Office and browsers.. Fully native >>>> apps can be non-compliant with the platforms look and feel. So this isn't >>>> really a Java-specific issue. >>>> >>>> Scott >>>> >>>>> On Dec 9, 2013, at 4:24 AM, Felix Bembrick <felix.bembr...@gmail.com> >>>>> wrote: >>>>> >>>>> Spoiler: This is something I have become intensely passionate about so >>>>> this is likely to be a long post... >>>>> >>>>> OK, so this (hijacked) thread started out as a discussion of options in >>>>> JavaFX for implementing "Look and Feel". I think everyone agrees that >>>>> even with CSS and skins, JavaFX lacks the built-in ability to define a >>>>> true Look *and* Feel. Further to this, there has been discussion on >>>>> Twitter and elsewhere regarding *native* Look and Feel and the merits of >>>>> attempting such an animal with JavaFX. >>>>> >>>>> It is on this topic that I would like to add my 2 bits (as I am known to >>>>> do)! I was going to use my blog http://justmy2bits.com but decided I >>>>> would be much more likely to be able to engage fellow JavaFX developers >>>>> in a positive, polite and respectful conversation here. >>>>> >>>>> First, anyone who may follow me on Twitter, in this forum or when I post >>>>> in other forums (anyone?) will probably be a little bit confused as to >>>>> where I actually stand on this issue. Well, this stems from the fact >>>>> that I have been giving confusing (if not conflicting) input into various >>>>> threads on this topic for quite a while. >>>>> >>>>> Why? >>>>> >>>>> Well, because until very recently, I myself was completely torn on the >>>>> subject of native Look and Feel. In fact, I seemed to oscillate on an >>>>> almost daily basis from thinking it's a great, achievable idea to >>>>> dismissing such an idea on various grounds. I am swaying so much because >>>>> I have so much riding on successful ports of JavaFX to iOS and Android >>>>> and because those ports depend heavily on resolving this issue once and >>>>> for all. >>>>> >>>>> Now I have had something of an epiphany and reached a conclusion. I now >>>>> do not believe that pouring large (massive?) amounts of resources into >>>>> the painstaking task of building a fully compliant, fully performant >>>>> native Look and Feel is justifiable or worth the effort. And let's be >>>>> clear about this: it is a *lot* of effort! >>>>> >>>>> But before I proceed I just want to say categorically how much I admire >>>>> the thoroughly awesome work/efforts of the likes of Pedro DV, Claudine >>>>> Zillmann, Hendrik Ebbers et. al. in (trying ever so hard) to bring native >>>>> Look and Feel to various OS/platforms with JavaFX. I cannot put in words >>>>> how much I am in awe of the commitment, the attention to detail, the >>>>> technical prowess, the artistry and the drive of these fantastic people. >>>>> Their work will undoubtedly be extremely useful to many developers >>>>> worldwide. >>>>> >>>>> I want to make all that *perfectly clear* because now I am going to >>>>> explain why I (probably) will not be one of those people and (hopefully) >>>>> do it with the utmost respect for the aforementioned rock stars :-) >>>>> >>>>> Right, so back to the issue of whether to or not to implement or use a >>>>> native Look and Feel. Some of the following comments have already been >>>>> made by me on other networks and in other forums so apologies if it seems >>>>> a bit repetitive to some. >>>>> >>>>> At first glance, the idea of a native Look and Feel seems almost like the >>>>> proverbial Holy Grail. I mean, if such a thing were truly possible and >>>>> viable, who wouldn't want one? You still have your single codebase >>>>> across all platforms and you just just plug-in the particular native Look >>>>> and Feel for your target platform and voila! World domination will >>>>> surely soon follow! >>>>> >>>>> Well, not quite. It's a great idea but I am going out on a limb to claim >>>>> that it has *never* worked. Ever! And by "work" I mean so that your >>>>> "not-so-native" app looks and feels (which includes all aspects of >>>>> behaviour, not just appearance) *exactly* like a true native app and *no >>>>> one* could tell you that it *wasn't* a native app. >>>>> >>>>> Yes, I know there are masses now screaming at their monitors who will >>>>> undoubtedly cite the numerous success stories of Swing apps or maybe even >>>>> Qt or some other cross-platform UI toolkit and maybe my >>>>> standards/criteria are harsher than others but I stand by my claim that >>>>> this has *never ever* really, really, really worked. >>>>> >>>>> OK, so why not? >>>>> >>>>> Here's my first point: I postulate that such a noble goal is not actually >>>>> achievable. It is not actually achievable for a number of reasons. >>>>> >>>>> It is not actually achievable because, in most cases, we do not have >>>>> access to the code that implements the native controls on each OS so, at >>>>> best, we are "guessing" when we try to emulate all aspects of their >>>>> appearance and behaviour. Try as we may, we will never get *every* >>>>> control exactly right and I firmly believe that anything that purports to >>>>> be something else needs to be *identical*. >>>>> >>>>> It is not actually achievable because just as you feel you have reached >>>>> an acceptable level of "compliance" (which I again wager is never 100%), >>>>> the goal posts will move. That is, the OS vendor will release an update >>>>> and even the minor ones can change either the appearance or behaviour of >>>>> controls, sometimes in subtle ways, sometimes in not so subtle ways. >>>>> Either way, there is then going to be a period of time where you are >>>>> playing a futile game of catch-up and during that time your "native" >>>>> controls will be surely exposed for the impostors they are. >>>>> >>>>> It is not actually achievable because the same control on one OS can look >>>>> and feel/behave quite differently on another OS which leads to very poor >>>>> levels of reuse. >>>>> >>>>> It is not actually achievable because many controls simply can't be >>>>> emulated in using Java/JavaFX most likely because they have exclusive >>>>> access to native system or OS calls that are not accessible to Java or >>>>> because the expected levels of performance or "snappiness" cannot be >>>>> achieved using Java by any means. Even with JNA or JNI you would be left >>>>> scratching your head in many cases. >>>>> >>>>> And, it is not actually achievable because it's simply too much work to >>>>> get anywhere near to perfection! We are talking *massive* amounts of >>>>> effort and very few people have either the talent, the eye, the attention >>>>> to detail or the patience to see such a project right through to the end >>>>> where *all* controls are covered. The rock stars I mentioned earlier are >>>>> the exceptions of course. There's clearly zero point in emulating *some* >>>>> of the controls only; you need the *full set* or it's just not viable. >>>>> >>>>> Finally, and to look at it another way, what do we get even if some >>>>> super-human delivers us a native Look and Feel for every possible >>>>> platform? Well, a massive maintenance nightmare for a start! This >>>>> super-human would basically be spending all their super time and using up >>>>> all their super powers just keeping such libraries current. >>>>> >>>>> So, if you are still with me, why bother? Just consider if all those >>>>> rock stars (and super heroes) concentrated all their super efforts into >>>>> either improving the features, stability, performance or appearance of >>>>> JavaFX itself? Just think what we could achieve! >>>>> >>>>> And on the why bother theme, why bother to devote all that time and >>>>> effort, spend all those millions, tear out all that hair and hit all >>>>> those roadblocks when the very thing we are trying to achieve is already >>>>> available? >>>>> >>>>> Yes, that's right, if you really, really, really want to build a native >>>>> app then why don't you just build a native app? There are numerous >>>>> tools, languages, IDEs, toolchains and libraries that enable you to build >>>>> awesome *true* native apps! I just don't think JavaFX is one of them :-) >>>>> >>>>> And it doesn't have to be one of those toolkits because JavaFX can be >>>>> used to build an entirely different class of application and I now >>>>> strongly believe that this is the kind of app we should be concentrating >>>>> on. That class (or classes) of app is one that is not so heavily >>>>> dependent on the native Look and Feel and doesn't need to be. There are >>>>> probably hundreds of thousands of apps that are like this. They are >>>>> everywhere and JavaFX is *perfect* for them! >>>>> >>>>> Scott Palmer has argued that this approach is not valid (and sorry Scott >>>>> if am inaccurately paraphrasing you). He cites examples such as Chrome, >>>>> Firefox and even MS Office as proof that this approach does not work. >>>>> However, my response to that would be to say that just because these are >>>>> examples of where the developers got it seriously wrong, they do not >>>>> prove that this approach can't work and isn't working all over the >>>>> marketplace. >>>>> >>>>> There is no need to develop crappy, mistake ridden software by using a >>>>> toolkit such as JavaFX in a way that does not attempt to emulate the >>>>> native Look and Feel and the fact that even big companies like Google >>>>> *still* clearly get it horribly wrong doesn't imply that we *all* have to >>>>> be so ineffective. >>>>> >>>>> Part of my newly-found aversion to emulated native Look and Feel comes >>>>> from my many years of both developing and using Swing applications. >>>>> Sure, I know there are *some* (handful?) successful Swing apps, most >>>>> notably those developed with the NetBeans RCP, but in general Swing has >>>>> failed to have any penetration into serious commercial software. Why? >>>>> Well, there are several reasons (and a lot are due to Java itself) but, >>>>> for me, I was never satisfied with the so-called native Look and Feel >>>>> options that come with Swing. I have been (and still am) very critical >>>>> of the Windows Look and Feel in Swing in particular because, even today, >>>>> there is a vast gulf between an actual native Windows application and a >>>>> Swing application with this Look and Feel. So much so that I still want >>>>> to almost knock my monitor off the desk when I am using an application >>>>> developed in this way. For me, this is not acceptable and such an >>>>> application could never be released as a serious commercial product. >>>>> >>>>> And that's pretty much what this all boils down to: developing serious >>>>> commercial software. >>>>> >>>>> If you are interested in developing something else then these lengthy >>>>> comments (am I *still* going?) probably do not apply to you :-) >>>>> >>>>> So to summarise, I argue that it is not possible to develop serious >>>>> commercial software using emulated Look and Feel in JavaFX or in *any* UI >>>>> toolkit. I *strongly* recommend that we all work together to make JavaFX >>>>> as good as it can be (which is absolutely awesome) by focusing on the >>>>> core product, the API, the performance, the feature set, the stability >>>>> *and* the supported platforms rather than throw good money after bad on a >>>>> *wonderful* goal that ultimately can never be reached... >>>>> >>>>> Just my 2 bits, >>>>> >>>>> Felix >>>>> >>>>> P.S. I surely hope I have not offended any/all those who either disagree >>>>> with the main points or who still believe that native Look and Feel is >>>>> viable. I remind you all that I am on my knees bowing with respect to >>>>> the rock stars I referred to and anyone else working on similar projects. >>>>> Absolutely no offence is intended, I am merely expressing my >>>>> (passionate) feelings on this subject. >>>>> >>>>> >>>>>> On 9 December 2013 19:10, Felix Bembrick <felix.bembr...@gmail.com> >>>>>> wrote: >>>>>> >>>>>> >>>>>> >>>>>>> On 9 December 2013 16:10, Scott Palmer <swpal...@gmail.com> wrote: >>>>>>> >>>>>>> >>>>>>>> On Dec 8, 2013, at 9:18 PM, Felix Bembrick <felix.bembr...@gmail.com> >>>>>>>> wrote: >>>>>>> <snip> >>>>>>>> Firstly, it will *never* be possible to completely emulate the native >>>>>>>> look >>>>>>>> and feel. >>>>>>> Sure it is. Though it may never be practical, for many of the reasons >>>>>>> you have given. >>>>>>> >>>>>>>> My reasoning is: why bother? >>>>>>> Because it matters. As computer literate developers, we often don't >>>>>>> realize what trips other people up. I get so frustrated with apps >>>>>>> these days because they have become hard to use simply because the >>>>>>> developers tried to define their own look and feel. For example, >>>>>>> Chrome and Firefox... Or Microsoft Office... >>>>>>> Where did the title bar go in chrome? >>>>>>> Where have all the menus gone in Chrome, Firefox andOffice? I can find >>>>>>> them, but when I have to play tech support over the phone to my parents >>>>>>> these changes are massive problems. I ask my dad to move he window by >>>>>>> dragging the title bar (please don't ask why he doesn't know to do this >>>>>>> himself after decades of computer use) and he says "there is no title >>>>>>> bar"... I the remember that yes, chrome did that... They got rid of a >>>>>>> standard concept in the OS' windowing system and screed the end users. >>>>>>> >>>>>>> These apps became harder to use because of this "innovation" in the UI. >>>>>>> >>>>>>> Contrast this with applications on OS X where getting the UI right has >>>>>>> always been an important priority for developers. Because adhering to >>>>>>> the system look and feel has always been strongly encouraged the system >>>>>>> is much easier to use. >>>>>>> >>>>>>>> These days, many apps do not look 100% native and may have their own >>>>>>>> controls or look and feel in general. >>>>>>> Yes, but to what end? They are now more difficult to use. >>>>>>> >>>>>>>> Why not channel all that massive >>>>>>>> effort in constructing an emulated native look and feel into simply >>>>>>>> making >>>>>>>> JavaFX better overall? >>>>>>> But I agree here. The general look isn't the main issue.. E.g. little >>>>>>> variations in color and minor tweaks to a few pixels here and there >>>>>>> don't really matter. What does matter is when you change the order of >>>>>>> buttons, like Okay & Cancel which have standard places that are >>>>>>> different between Mac and Windows, or you move the About menu item from >>>>>>> the Application menu on an OS X app to the help menu! because that is >>>>>>> where you find it on Windows. Those things matter. >>>>>>> >>>>>>> >>>>>>> Scott >>>>>>> >>>>>>>> Felix >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On 9 December 2013 12:35, Pedro Duque Vieira >>>>>>>> <pedro.duquevie...@gmail.com>wrote: >>>>>>>> >>>>>>>>> Thanks! >>>>>>>>> >>>>>>>>> @Jasper: Yes, that's very interesting! Forgot that was possible to do >>>>>>>>> in >>>>>>>>> CSS. >>>>>>>>> >>>>>>>>> >>>>>>>>>> On Mon, Dec 9, 2013 at 12:15 AM, Stephen Winnall <st...@winnall.ch> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> It may be possible to change the LOOK with CSS, but not the FEEL, >>>>>>>>>> which >>>>>>>>> is >>>>>>>>>> where Java apps have traditionally failed big time. >>>>>>>>>> >>>>>>>>>> Some things that I don’t think can be changed with CSS: >>>>>>>>>> >>>>>>>>>> 1) texts >>>>>>>>>> 2) order of buttons >>>>>>>>>> 3) escape characters for shortcuts >>>>>>>>>> 4) menus >>>>>>>>>> 5) system-level stuff (double-clicking on files, dropping files on >>>>>>>>>> applications, …) >>>>>>>>>> 6) filesystem conventions >>>>>>>>>> 7) ... >>>>>>>>>> >>>>>>>>>> I think FXML can fix some of these, but not all. So it seems to me >>>>>>>>>> that a >>>>>>>>>> LaF in JFX will consist of at least: >>>>>>>>>> >>>>>>>>>> - one or more CSS files >>>>>>>>>> - one or more FXML files >>>>>>>>>> - some plumbing at the system level >>>>>>>>>> >>>>>>>>>> It would be nice to have a set of proper LaFs for each major platform >>>>>>>>> with >>>>>>>>>> an appropriate common API. >>>>>>>>>> >>>>>>>>>> Steve >>>>>>>>>> >>>>>>>>>>> On 9 Dec 2013, at 00:20, Jasper Potts <jasper.po...@oracle.com> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> You can set skin classes from CSS so should be able to do everything >>>>>>>>> you >>>>>>>>>> could with Swing and more. With just a CSS file and skins as and when >>>>>>>>>> needed. >>>>>>>>>>> Jasper >>>>>>>>>>> >>>>>>>>>>>> On Dec 8, 2013, at 3:00 PM, Jonathan Giles >>>>>>>>>>>> <jonathan.gi...@oracle.com >>>>>>>>>> wrote: >>>>>>>>>>>> At present there are no plans to introduce any further API or >>>>>>>>>>>> functionality in this area, but if there is something you are >>>>>>>>>>>> wanting >>>>>>>>>>>> then you should file feature requests in Jira. >>>>>>>>>>>> >>>>>>>>>>>> -- Jonathan >>>>>>>>>>>> >>>>>>>>>>>>> On 9/12/2013 11:54 a.m., Pedro Duque Vieira wrote: >>>>>>>>>>>>> Hi, >>>>>>>>>>>>> >>>>>>>>>>>>> Is there any Look and Feel mechanism in place, like the one in >>>>>>>>>>>>> Swing? >>>>>>>>>> That >>>>>>>>>>>>> doesn't appear to exist.. >>>>>>>>>>>>> >>>>>>>>>>>>> Are there any plans to add one? You can only do so much with >>>>>>>>>>>>> CSS... >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks in advance, best regards, >>>>>>>>> -- >>>>>>>>> Pedro Duque Vieira > >