Posted on Sep 8, 2007

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 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

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.

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

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.

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.

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… ?

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.

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.

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.

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?

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….

> 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.

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 […]

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 […]

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