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.

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 Con Mac andCtrl Con 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.
June 6th, 2007 at 6:33 am
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.
June 6th, 2007 at 6:48 am
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.
June 6th, 2007 at 6:53 am
[…] http://www.jasperpotts.com/blog/2007/06/nimbus-lf-update/ […]
June 6th, 2007 at 7:14 pm
Please fix the scroll bars. I know you’re going for something “new” and “cool”, but that just ain’t it. They’re distracting.
June 6th, 2007 at 7:28 pm
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.
June 6th, 2007 at 7:31 pm
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.
June 7th, 2007 at 12:44 am
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.
June 7th, 2007 at 1:50 am
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.
June 7th, 2007 at 4:14 am
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.
June 7th, 2007 at 7:49 am
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 !!!
June 7th, 2007 at 7:57 am
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
June 7th, 2007 at 9:23 am
Yes please, change the scrollbars. They are really distracting and deserve a review.
June 7th, 2007 at 9:27 am
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.
June 7th, 2007 at 2:53 pm
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
June 7th, 2007 at 4:00 pm
It’s hard to tell without a work related application but I think I like the asymmetric scroll bars.
June 7th, 2007 at 4:48 pm
I love the scrollbars when they’re not buggy (overlapping edges on very short viewports).
June 7th, 2007 at 5:53 pm
“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?
June 7th, 2007 at 8:12 pm
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.
June 7th, 2007 at 10:01 pm
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.
June 7th, 2007 at 10:08 pm
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.
June 7th, 2007 at 10:40 pm
I personally dislike the indeterminate bar. The rest of the UI looks fine but something about the indeterminate bar looks “off”.
June 7th, 2007 at 10:55 pm
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
June 8th, 2007 at 2:54 am
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?
June 8th, 2007 at 3:02 am
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,
June 8th, 2007 at 3:19 am
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?
June 8th, 2007 at 9:24 am
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…
June 8th, 2007 at 6:08 pm
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
June 8th, 2007 at 6:52 pm
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.
June 8th, 2007 at 7:28 pm
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…
June 10th, 2007 at 6:04 am
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.
June 11th, 2007 at 3:26 pm
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.
July 2nd, 2007 at 7:21 pm
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.
July 7th, 2007 at 4:59 pm
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
August 8th, 2007 at 3:26 pm
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!