Posted on Jun 6, 2007

Nimbus L&F Update

So it has been a while since I blogged about Nimbus, Java One has come and gone and I am sure you are all wondering whats happening to it. Well things have changed for Nimbus since it was announced at Desktop Matters conference in March. The initial plan was for Nimbus to be a open source project jointly run by Ben Galbraith and myself. In early prototype I hacked together thats available from nimbus.dev.java.net was very well accepted both inside Sun and in the swing community. As a result a decision was made to bring the Nimbus L&F into the JDK as part of the new Consumer JRE. What this means for is it will be available as part of the JDK 6 sometime early 2008. If you would like to read more about the Consumer JRE then read here.

Nimbus Coming Soon

I think this is amazing news for Nimbus L&F as it will hugely strengthen its adoptance. I am now working full time on getting Nimbus done with the tight deadlines to get it to you for early next year. The final version should be complete around August at which point I will try and get it released back to the open source project. Hopefully then we can get a good chunk of testing done on many different applications so we have a great version for the JDK. Ben has said that he will help with the effort to take it at that point and do a backport to run on JDK 5.

Here is my personal list of objectives for Nimbus L&F:

  • Create as high fidelity implementation of the SPEC as possible within the technical constraints.
  • Aim for 100% Java2D painted vector graphics, so no images other than icons. This is a ambitious aim as it is a lot more work than a image based L&F but will give us huge flexibility in the long run with things like high DPI monitors and resolution independence.
  • Be based on Synth so that there is finally a fully realized L&F from Sun for Synth that can be used to help other people create new Synth L&Fs.
  • Be as true feel wise to the native platform as possible within the tight deadlines. By this I mean using the native key combinations like Command C on Mac and Ctrl C on Windows for copy. Also to try and have the File Chooser for have a layout and functionalty as the native L&F one but with Nimbus skin.
  • Provide API or hooks so the Nimbus painting code can be used to aid skinning custom swing components.

These are what I would like to achieve with the Nimbus L&F, how much I can manage within the tight deadlines we will have to see. If features don’t get in then hopefully we can add them to the open source project and later back into the JDK. Animation is on the would really like to get it in pile but there as a lot to do before I get there.

I am very interested to hear any feedback you have on Nimbus, like feature X is crucial to my company using Nimbus or feature Y is not important to me. I will do my best to accommodate any good suggestions into Nimbus.

41 Comments

  • The spec for nimbus looks amazing, seriously. If you guys can render that into a look and feel, I’ll be deliriously happy.

    The only “feature” which seemed to be lacking (besides the obvious deviancies from the spec due to incomplete implementation) is it’s a little tough to build the look and feel into a usable JAR. It’d be nice to simplify this process a little bit, or at least document it. :-)

  • bugfaceuk says:

    This is great work and I really just want to add my support to the project. My company has recently been forced to support native windows L&F in order to give our application and kind of modern of look, but Nimbus will allow us to maintain a cross platform look (testing, documentaiton and training efficiency gains) which also does not force our application to look like it’s lurching out of the dark ages.

    Great work, and our key requirement is that you release it last year. ;-)

  • Adam says:

    Please fix the scroll bars. I know you’re going for something “new” and “cool”, but that just ain’t it. They’re distracting.

  • Ah, that’s an excellent point. I had forgotten about the scrollbars. They’re a little…weird. (not just the implementation, but the spec too). For starters, they’re too fat. Maybe they should be side symmetrical too, I’m not sure.

  • Hmm, maybe on second thought they’re not so bad. Still a shade too fat I think, so maybe that would make them seem a bit better. The asymmetry grows on you after a while though.

  • realbadapple says:

    I think one of the most important things is the native ‘feel’ of the underlying platform be adhered to as close as possible. This has been a short coming of Java apps in years past (it has gotten better). I would also like to see a directory chooser, though I’m not sure if this is the right place to request it, for selecting directories instead of using the FileChooser or JFileChooser. Lower down on my request list is that the colors of selected, mouse over, active, nonactive of buttons needs something with a little more contrast. I would also like the tabs of a JTabbedPane not to take up so much space (read the space between them). Other then this I think this is an excellent LaF. I only wish it were in the JDK sooner.

  • Riyad Kalla says:

    I have to agree with Daniel, I *love* how you did the rest of the LNF except had a bit of a hitch with the scroll bars… I didn’t want to complain because everything else was so fantastic, I figured I was in a minority.

    The lack of symmetry with the scroll bars looked odd to me, but like I said, it doesn’t look *bad* just different. So if you went with a more symmetric look that would be great.

  • Aron says:

    Overall this looks quite excellent and I cant wait to start testing it.

    Scrollbars look fine to me in the spec. However I always have a double take on the pressed buttons (not sure they give enough of a sunken look).

    This is the kind of stuff that will swing the pendulum back from ajax to swing.

  • Aleix says:

    Hi jasper, it’s terribly amazing, good looking and modern lookl nad feel. I like it a lot and I will use for sure in my
    company (client-server app) when it’s released !!

    Thanks, keep on the good job !!!

  • Mikael Grev says:

    Hello Jasper,

    I think you are really on the way to create something great here. There are a few design misses IMO though. I wonder if you are interested to get some feedback in that direction or if the design has been frozen? I don’t want to waste a few hours commenting screen shots if the design is set.

    Cheers,
    Mikael Grev

  • Jimbo says:

    Yes please, change the scrollbars. They are really distracting and deserve a review.

  • Jimbo says:

    Ah yes I forgot. Please, please, please, make sure the windows decorations comply with Apple HIG when running Java on OS X. This means at least put them on the left side of the window and not on the right as on Windows and Linux.

  • Gorazd Praprotnik says:

    Hi. As I’ve already said, Nimbus look is much better then Ocan, but you have to work on it, specially design. To mention some problems: tabbed panes have to much space bettven ears (sorry, I don’t know right english word), sliders are blue, but progress bars are orange. They should have same colour. It is nicer to have drop shadow on progress bar then blured whole one. Green buttons on internal frames are awfull. I prefer stripes on flat surfaces like Mac look. But I like scroll bars. So, I think Nimbus look is on right direction, but you have to correct some things. I hope, you will success with it. Till then, I wil use Liquid L&F.

    Gorazd Praprotnik

  • Pete says:

    It’s hard to tell without a work related application but I think I like the asymmetric scroll bars.

  • Alexis MP says:

    I love the scrollbars when they’re not buggy (overlapping edges on very short viewports).

  • swpalmer says:

    “The final version should be complete around August at which point I will try and get it released back to the open source project.”

    - So the development is essentially closed until it is complete? That’s disappointing. I’ve been very eager to watch the development of Nimbus as I’m trying to assess the practicality of using Synth to implement a look and feel for my company in order to get some cohesion and brand awareness in our otherwise plain-looking UIs.

    “Aim for 100% Java2D painted vector graphics, so no images other than icons.”

    - while I fully understand the reasons behind this, I do hope that fully image-based Synth UIs will be possible. The goal being that a graphic designer can do most if not all of the work. The promise of Synth was a full look and feel with no “programming”, just the images and an XML config file. Will Synth deliver on this?

  • jasper says:

    I don’t think it will be possible to do major design changes to Nimbus but small tweaks should be possible. I will look into the idea of having a switch for symmetrical scrollbars as this seems the most controversial point. Jimbo thanks for the pointer on window control positioning, I will consider that.

    swpalmer: Synth already has good support for images based L&Fs, once I am finished with Nimbus I will work on some documentation for Synth to help other people make new L&Fs.

  • aberrant says:

    In general I really like the look of Nimbus. The window buttons seem too a tad bit too colorful and a bit XPish. Also the inactive internal frame borders look “concave” and I’m not sure I like that. Since the internal frames are not in the spec is there any chance we could just have a flatish border instead of the concave? Also is there a plan to have the “one touch expandable” buttons available on the JSplitPane? I don’t see it in the spec. Any idea if this look and feel will work good over a remote X session or threw VNC? Some of the really pretty look and feels out there don’t work so well when video acceleration is taken out of the picture. Ocean work’s well though.

  • To put in my foot again, I absolutely adore the look of the buttons, tabs and progress bars. :-) Well, the progress bars might need a tinsy bit of work. I agree that the normal bar (non indeterminate) needs something to make it’s surface a bit more interesting.

  • Gili says:

    I personally dislike the indeterminate bar. The rest of the UI looks fine but something about the indeterminate bar looks “off”.

  • Gili says:

    Sorry I posted too soon. I wanted to say:

    1) I don’t like the repeating pattern used in the indeterminate JProgressBar.
    2) I actually like the non-symmetrical scrollbars a lot. It looks quite professional.
    3) The scissors icon looks bad (too wide?) but I assume that’s just an example, not something which ships with Nimbus right?
    4) The disabled buttons look a little *too* faded out. I would advocate trying a bit more opacity.
    5) I don’t like the “grip” in the middle of the JSplitPane. It doesn’t seem to suggest that you can click or drag on it. Please consider another shape.
    6) In the JTable table, is there a way to round out the corner edges?
    7) I am very impressed by the Nimbus specification document. You went into incredible detail and it’s very appreciated. I think you’re doing an amazing job!

    Thank you,
    Gili

  • Joe Cole says:

    Hi Jasper,

    Wonderful work – really like the new design. I agree with some of the comments; mostly everything is great, apart from potential problems occuring in the scrollbar and progressbar.

    Progressbars:
    1. Personally I would choose blue – the orange is alright but blue is much easier to design with. That way when changing the nimbus theme colours everything will change. I can imagine skins the colour of the rainbox for customisation of nimbus through xml – not sure if this is planned.
    2. The indeterminate bar is the only standout imho – nimbus is a beautiful example in the most part of a minimalistic design – the indeterminate bar just doesnt fit. Perhaps something really simple, just a rounded rectangle or circle would be better and fit better with the overall design. Would also be easier to build.

    Scrollbars:
    1. Love the look – think they will work well. Again on the “minimalistic” design choice – it should be at least possible to control the amount of rounding from what you have to 0. I know we would immediately change this to 0 for our applications.
    2. Symmetrical will help the situation – but we would still want to be able to control the roundness.

    Love the work – congratulations. Do you have an ETA on nimbus 1.0?

  • Mikael Grev says:

    There are just smaller things like the size and direction of shadows, inconsistencies of gradients and such. Pressed states are generally standing out too much and corners of buttons are too fat in some cases. Tab “ears” look ugly. The glossy stuff are inconsistent as well. So, while everything look rather good by themselves there is inconsistencies. Or so a “designer” would say..

    Cheers,

  • ilhami visne says:

    I’m making these days a lot of screenshots of my swing application. because they are all pixel based images, they can’t be resized without quality loss. You said, this L&F will be painted as vector graphic. Is it possible to add a method, which will make screenshot of any jcomponent and save it as a vector image?

  • Romain Guy says:

    Mikael and everyone else, please note that Nimbus was designed externally by a design company. It is used on Solaris as a GTK skin. It was created by professional designers…

  • Gorazd Praprotnik says:

    If we are asked to tell our comments about Nimbus, then I think we have right to speak out our feelings, regardless who’ve made it. Nobody is perfect, so it is vise to listen other opinions. And frankly, most of comments are very convenient.

    Gorazd

  • Personally, I think you’re (jasper) taking a very good line on all these suggestions: minor tweaks not major changes. Aside from a few extremely minor things here and there (such as the progress bars), I don’t think you should touch a thing. Implement the LAF, let everyone see how it’s really suppose to go together, *then* we can complain about it. :-)

  • Mikael Grev says:

    Romain, are you telling me that real designers have used the Java2D API to create widgets? I highly doubt that but of course, one should never say never… If I’d guess the designers did the original design and developers has then translated this to Java2D.

    For instance, I highly doubt that the designers would make the right corners slightly bigger than the left corners in the buttons. This comes from a Java2D bug (probably) and Chet knows about it…

  • Adam says:

    Sorry to chime in again… On the scrollbars…. I really love the look, except for the scroll bars (as mentioned). I think there is a bit of a usability hurdle (especially for more traditional business type applications and/or traditional users, for example).

    I’m also concerned that while the scrollbars look neat (because they’re different and “fresh”), that this gee-whiz factor will be one of those things that eventually wears off and will become an annoyance. In my mind, it’s the L&F’s most “radical” departure from traditional UI design and because of that, though it may come across good/fun/exciting at first glance, will be agitating with long term use.

    Someone suggested a mechanism to control the amount of “curve.” That would work (at least from this developer’s perspective). I would hope a parameter to curve it both directions, or to make it square like traditional would be available.

    There’s so much to like about Nimbus, it would be sad if the look pushed the envelope too hard and was abrasive in any way. New is good, but conservative is also good. I believe it’s a balance.

  • Nilojg says:

    Hi.

    I think Nimbus looks really great and I think your specifications are very detailed, so although is a work in progress we can make a good idea of the final result. I love buttons, radios, checks, etc, but I think scrollbars should be simetric, because their shape is very near to a tab.

    Aparently, Nimbus will have three colors: bluegrey for the general background, blue for the details and orange for the progressbars. I like the combination, but, why three colours? Swing works with only two colours. Why more? If an application alows the user to change the colour scheme changing a metal theme it will have to options: to use an standard metaltheme and change only two colours, or to use an SpecialNimbusTheme and be an only-nimbus-laf-application. Because I suppose Nimbus will honour metalthemes and will allow user or application programmer to change the default colours.

    My english is quite bad and I’m not as “soft” as polite english needs, so don’t think I don’t like nimbus, because in fact I like it very much and I think is a very promising work than will give Java a modern look, but if you are asking for feedback, I think that to make a laf as interchangable as possible is very important.

  • Myrith says:

    I think the majority of Nimbus looks awesome so far. The only thing I’m not a fan of is the Indeterminate Progress Bar; the moving walnuts are strange and distracting. I do like the scrollbar though. It’s a fresh, creative look, and I don’t find it awkward to use.

    As someone else said, the stroke width of the rounded corners on the tabs do look too thick. It might be an issue with the 2D Graphics engine though. Horizontal and vertical lines are fine, but the engine’s anti-aliasing makes everything else (curves, diagonals) look too thick for a 1px stroke width.

    Variable widget sizes are a dream come true. I’m developing an applet that uses many GUI components, and screen real estate is important. (I was upset at how fat the arrow button on the Metal combobox is, even after specifying a combobox size.) And overriding UI methods is a pain. I’m glad Nimbus will make sizing easier.

    I was thinking about using Synthetica for my applet, but it’s huge and has permission issues. So, I’m really looking forward to using Nimbus as a consistent, cross-platform GUI that users would feel good with. I’m glad Sun’s finally investing lots of effort in a L&F!

    (Oh, one more thing… Will Nimbus support a narrow title bar for the JInternalFrame.isPalette property? I find it useful.)

    Thanks for your blog posts. :)

  • Ricardo says:

    I really like this laf, but please, implement a one-click-expandable feature for the split panes; I think it is very useful for some people

  • Alex says:

    Hi Jasper,

    First of all, great job on Nimbus, I really like the looks! I’ve decided to use it as a LaF for one of the projects I am working on but I am running into a major issue with JTree rendering. Surprisingly, nobody has brought this up before but even in the current WebStart demo you can see that JTrees aren’t rendered correctly. All you get is flat thin dark line on the left side of what should be a properly indented and marked tree. Unfortunately, JTrees are crucial to the functionality we are working on :( Any thought on when that part of LaF would be completed?

    Thanks!

  • Flavelle says:

    Not sure this is the right place, but is this nimbus theme connected to the theme that is implemented in GTK (like in OpenSolaris)? If so, there are a couple of questions: 1) Is there a way to force the implementation of a background image? 2) Are there plans to provide a GDM implementation?

    Thanks – even with just the widgets, it is a wonderful theme in GTK.

  • Jasper Potts says:

    Flavelle: This is very little connection between the GTK Nimbus theme on Solaris and the Java Nimbus LAF that I have been working on. They are both versions of the same design spec and they are both based on SynthLookAndFeel that is where the similarities end. I don’t know what plans there are for the GTK LAF so can not help there sorry. If you switched from the GTK LAF to Nimbus LAF for your Java applications on Solaris then you could set a background image by creating a Painter class which paints it and putting it into UIManager defaults with the right key, see http://www.jasperpotts.com/blog/2008/08/nimbus-uimanager-uidefaults/ for details on which keys do what.

  • Flavelle says:

    Jasper: Thanks for clarifying the connection between the two Nimbus’. Much appreciate the information on how to do the background in Java. For the moment, I’m still working my way through the learning curve on a new operating system, so programming is somewhat down the horizon.

  • Ronnie says:

    I want to know is there any method to make the JFrame title button(minimum button, maximum button and close button) like JInternalFrame title button?

  • Pushkraj says:

    Is there any way to customize look and feel of indeterminate progress bar in Nimbus