Posted on Sep 8, 2007

Nimbus almost done

Finally we are almost done with Nimbus and I am very pleased with the way it looks. There are many small details that need to be pollished and a couple of big ones like tabs but they will all be done by the time it gets released. I thought it might be time to tease you with some screenshots and details to keep you hungry.

Nimbus Buttons Windows XP
Nimbus Buttons on Windows XP

Technology

I think we have also made some exciting technology behind nimbus it’s not just another standard hard coded swing look and feel

2D Vector

All of Nimbus is rendered with 2D vector graphics, there is not one image even for all the icons. This means that the whole of Nimbus is just 56k as a packed jar which is pretty impressive for a whole rich look and feel.

High DPI Ready hd ready

As the whole of Nimbus is drawn with shapes and gradients it can be scaled to any resolution. You will not be able to control this yet but watch for it in the near future.

Based on Painters

All painting for components is done with simple stateless implementations of the Painter interface. These painters are stored in the UIDefaults table so they can be replaced if you would like to change the look of components or can be used in your own components if you would like to create a custom table header for example that looks the same as the standard Nimbus one plus something extra.

Customizable

All colors, icons and fonts are derived off UIDefaults keys so the whole UI can be customized by changing values in the UiDefaults table.

Easy to skin 3rd party components to fit in

All of the colors, fonts, icons, borders and painters are exposed through the UIDefaults table which means they are available to your 3rd part components to help you skin them in a Nimbus style.

I saved the best for last….

Nimbus was drawn graphicaly in a new tool we have been building. Almost none of it was hand coded. We have built this tool that is like a mini Photoshop or Illustrator that lets you graphicaly draw all the 2D vector graphics for each of the states of the components. Those graphics are then compiled into Java2D painting code which is exposed as simple Painters to the LookAndFeel. It has support for advanced features like sub-pixel acuracy, complex gradients, layers and layer effects like drop shadow and glow. The tool is still something internal that we have hacked together but we are working on getting it opensourced and making it into something you will be able to use. Both for creating new look and feels and for drawing painters that you may want to use anywhere in your application. I am looking forward to being able to release it.

Well I hope you are as excited as I am about Nimbus and can’t wait to try it out in your own apps. You should not have to wait to long for the first public alpha build. :-)

Nimbus OptionPanes Solaris
Nimbus Option Pane Dialogs on Solaris

41 Comments

  • [...] just posted a blog entry in which he explains that Nimbus is almost done. That is exciting. Even more exciting is how Nimbus was implemented. Nimbus was built entirely with [...]

  • machinshin says:

    You are right, I can’t wait to use this theme in some sample apps. Maybe even try to change the blue color of the theme to different ones (green, orange, …)

    Great news and Great theme!

  • [...] Update: just as i thought we were done for the week, Jasper posted an entry on Nimbus work in progress: [...]

  • [...] saw this post by Daniel Spiewak that is a great summary of what is going on with Nimbus LNF as well as the fact that the LNF is based on the new “painter” functionality introduced [...]

  • Qil.Wong says:

    I cannot see the picture.

  • [...] doesn’t provide builtin support for Synth-based LAFs. It would be interesting to see how Nimbus is going to address this issue, especially with the plans to backport it to JDK 5.0. Bookmark [...]

  • Rhingi says:

    Congratulations! looks very promising. I like the new Look & Feel, but I think we also need a new default cross-platform font that can get along with it too. Any good news?

  • jtree says:

    My Websense does not allow images from flickr.com, Hope that JTree will look as beautiful as other components

  • jtree says:

    Do you use NetBeans, you may use NetBeans with nimbus laf, and that you can get some idea from
    use following command in windows, other os may be a little different
    nb –jdkhome “C:\Program Files\java\jdk1.6.0″
    –cp:a “C:\Program Files\Java\jdk1.6.0\jre\lib\ext\nimbus-2007_05_27.jar”
    –laf org.jdesktop.swingx.plaf.nimbus.NimbusLookAndFeel
    you can get help from nb use this: nb –help
    “nb” may be C:\Program Files\netbeans-5.5\bin\nb.exe

  • aberrant says:

    Looks great, but how CPU/GPU intensive is this look and feel? Will it perform well over something like VNC or Tarantella (Sun Secure Global Desktop Software)?

  • Bill says:

    Any hooks for animations/transitions? Or is that something perhaps intended to be in custom Painter code?

  • swpalmer says:

    This is great, but why is all the Nimbus development happening behind closed doors? The WebStart demo on the Nimbus project page still appears to be an old version (tabbed pane is still very broken for example). The subversion repository hasn’t seen changes in ages.

    I guess when you last blogged about Nimbus being accepted into the Consumer JRE you didn’t make it clear that the java.net project died the same day?

    It’s too bad as I would have liked to see more of the development versions.

  • Great! I like this approach.

  • jasper says:

    jtree: I have not put up a screenshot of the new Nimbus Trees but they are very near the spec images at https://nimbus.dev.java.net/spec/index.html
    I have not tried to run Netbeans with Nimbus it will be intresting to try, when I get time I would like to make a NB module for Nimbus LAF with the UiDeligates for the NB custom components like dockable windows.

    swpalmer: Sorry I didn’t make this clear, it was sudenly full throtle on Nimbus as soon as I was told it was on the feature list for the Consumer JRE. I have not had time to do the paperwork to resync the internal and opensource projects. There is also a issue that there is about 20 bug fixes to Synth needed for Nimbus so it can’t run against a older JDK without a -Xbootpath with the Nimbus jar. There is a public early access version of the consumer release due out in the not too distant future which will include a pretty complete version for NImbus that you can try your applications with.

    aberrant: The new Nimbus is deffinatly heavier on CPU/GPU than older look and feels, but that is the way off of looking more modern. It is all image cached in volitile images and so the general runing of the interface is very fast. With the new D3D pipeline in the consumer release all 2D and Image rendering is handled in the GPU on newer cards. How this will perform over remote connections I am not sure, I can’t see it being any different over VNC to any other LAF as VNC is dumb and just shipping images anyway, it dosn’t care how complicated the graphics are in the image. Other remote connection technologies I am not sure about.

  • Qil says:

    Does nimbus support multilanguage? My system is Chinese,Windows XP, and the webstart demo on nimbus.dev.java.net still cannot display Chinese characters.

  • aberrant says:

    Thanks jasper, I’ll just have to wait and try it.

  • Tonny Kohar says:

    I am most interested in the new builder tool aka mini Photoshop or Illustrator as you said in your blogs. Would you mind tell us (in the next blog):

    # What is this new tool ?
    # What is the technology behind it ?
    # Does it use any Java FX behind it or just the painter things ?
    # Is this somekind of Microsoft Expression Blend or the Adobe Flash offering, but java only ?
    # Replacement for Netbeans Matisse or co-existing complement tools ?
    # Does it use any svg, I saw your other blogs post regarding svg path string and general path ?
    # other… ?

  • alexl says:

    I just reviewed your spec images page https://nimbus.dev.java.net/spec/index.html, and overall it looks really excellent.
    I just had some minor comments:
    1. I don’t like the indeterminate progress bar. It is very distracting. Since it is conveying less information than a determinate progress bar, i.e. it is just saying it’s working instead of what % done, I think it should be less eye-catching than the determinate progress bar also.
    2. I thought the disabled buttons and other controls looked a little too faint. It’s almost like you’re trying to make them disappear, rather than just show they are disabled. Maybe the real thing looks better, but just thought I’d mention that.
    3. I thought the jtree didn’t look that good. I don’t like triangles for the expanded/collapsed handles, and the folders seemed a little too indistinct; I guess working on windows I’ve gotten so used to the + and – boxes for the expanded/collapsed handles and the manilla folders.

  • abu abdulla says:

    I have test it with arabic application (i.e. RIGHT_TO_LEFT layout) in which it starts to through exceptions every where. nothing is painted !! JTree/JList was not their ??
    simply it didn’t work as expected in RIGHT_TO_LEFT application.
    please take a look for this issue please.

  • aleixmr says:

    Thanks for the good job !! We have a comercial application written entirely in swing, cannot wait to test nimbus on it -:) !!!!

  • Carl says:

    Jasper,

    It’s about time. Just kidding.

    I believe the style and design is like a good suit and tie it may last the test of time (at least more than the metal lnf).

    Great job guys…

    -Carl

  • jasper says:

    Qil & abu abdulla: The old version that is on the Java.net project has no support for other languages or left to right. The version that will become part of the JDK will support both.

    Tonny Kohar: Lots of questions :-) The answer is its very specific its not a general tool like a Flash or Expression. Also it is not a general gui builder tool like Matisse. It is specificaly for creating new Swing look and feels and skining custom or 3rd party components. Without such a tool it would have been impossible to code all the drawing code for Nimbus by hand.

  • “A consumer JRE” == JRE6 Update 3 ? yippee : booo!

  • Aron says:

    I download the 2007 09 09 from java.net to try it out but running into exceptions for some operations that are quite possibly bugs. I exercise swing fairly well – is there any place community members should log bugs or is it too early for that kind of end user testing?

  • Matt Nathan says:

    Good to see this is progressing nicely, can’t wait to see how it feels.

    How did you manage to solve the focus glow problem?

  • randi says:

    Most of the widgets in the Nimbus spec looks good, but the checkbox with the checkmark touching the borders is just downright ugly and should be fixed. Please get some opinions from designers.

    Please.

    It is the design sensibilities (or lack thereof) that is keeping java from making inroads into the desktop.

    Keep up the good work, and please fix the above issue.

  • randi says:

    Using OS X as a reference, you will see that the checkmark overshoots the checkbox as is the case with when a person does when filling out a form by hand. I apologize in advance if you think i am nitpicking….

  • > Without such a tool it would have been impossible to code all the drawing code for Nimbus by hand

    Does this mean that the spec colors are hard-coded in each one of the UI delegates?

  • Andres Acosta says:

    Why not release a beta version for impatient beta testers as me ? Maybe we can test it and return feedback about bugs and others…

    Excellent work !!! I am very, very, V E R Y impatient to use it.

  • creyesis says:

    i like it, its a bit too stylised though, imo.

  • Joe says:

    Creyesis: Thats something I never thought I would hear about default java ui’s. “Too stylised”. Great work jasper and team.

  • swpalmer says:

    > There is also a issue that there is about 20 bug fixes to Synth needed for Nimbus…

    That’s the main reason I was so glad to see Nimbus accepted into the Consumer JRE. Your new tool to help with the skinning and painting code is also very exciting. I hope to finally be able to make a full blown look and feel for our company to help brand our products and make them look like they belong together.

  • Joshua Smith says:

    It would be great if this tool could be used with Java FX Script as well.

    Very nice L&F!

    Josh

  • jasper says:

    Bill Robertson: There is no fixed release date for 6 Update N but I think N >= 5 so little while of yet.

    Aron: You can describe your issues here, or on the Swing Forum or submit bugs though Suns bug system. We will look into them.

    Matt Nathan: We kept it down to 2px so we are painting within the components bounds. There are a number of solutions we came up with to paint outside a components bounds but none of them would be compatable enough to work with the majority of existing applicstions. The focus is just painted with a sub-pixel sized antialiased filled shape.

    randi: I agree that the checkbox ticks touching the edge of the box is a little ugly but the Nimbus design is already implemented in GTK so these things are fixed.

    Kirill: The colors are hardcoded in the painters but stored as offsets from base colors. It would not make sence to expose them all as just a button has 85 colors.

    Andres Acosta: There is a early access version out now, see my latest blog :-)

  • [...] Nimbus classes are located in the sun.swing.plaf.nimbus package, and as Jasper already mentioned, most of the code is generated from a designer tool. While the source code of Update N is not yet [...]

  • softwarevisualization says:

    the tool that writes the graphics.. that’s the BIG thing in this.. along with Nimbus being great of course. That tool could really change things; I am writing a tool with the same idea.. a Photoshop-type GUI that outputs the code needed to draw what the designer drew. You just come to need something like that if you want dynamic, good-looking UIs. I’m sure I’m not the only one to realize that and make a move in that direction, so please release it when it’s really ready to be released and I’m sure developers will get its point and take to it.

  • [...] fixing scores of core Synth bugs along the way. Jasper Potts (one of Nimbus developers) had a very interesting announcement a few months back, saying that they are working on a designer tool for Nimbus. While the full [...]

  • swpalmer says:

    Any update on the designer tool?

  • Wanted to provide some positive feedback for Nimbus. We’re running our Ganymede (http://tools.arlut.utexas.edu/gash2/) application with Nimbus, and it looks absolutely fantastic.

    Can’t wait until Nimbus is officially released to the world!

  • envoy says:

    So how about this designer tool? Any word on a release, pre-release :) Anything to return my sanity.

  • kurt6string says:

    Every LNF available for java is professional unusable from my experience, Nimbus didn’t work either.
    Well, as of 2/6/2010 – running win xp and jdk of:

    java version “1.6.0_17″
    Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
    Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)

    NIMBUS DOESN’T WORK – because of…………

    Caused by: java.lang.NullPointerException
    at rapidview.wepls.forms.WeplsRealtimePanel.addPropertyChangeListener(WeplsRealtimePanel.java:35)
    at javax.swing.plaf.synth.SynthPanelUI.installListeners(SynthPanelUI.java:49)
    at javax.swing.plaf.synth.SynthPanelUI.installUI(SynthPanelUI.java:38)
    at javax.swing.JComponent.setUI(JComponent.java:661)
    at javax.swing.JPanel.setUI(JPanel.java:136)
    at javax.swing.JPanel.updateUI(JPanel.java:109)
    at javax.swing.JPanel.(JPanel.java:69)
    at javax.swing.JPanel.(JPanel.java:92)
    at javax.swing.JPanel.(JPanel.java:100)
    at rapidview.wepls.forms.WeplsRealtimePanel.(WeplsRealtimePanel.java:59)
    at rapidview.WeplsMainFrame.initComponents(WeplsMainFrame.java:920)
    at rapidview.WeplsMainFrame.(WeplsMainFrame.java:129)
    … 15 more