Geertjan's Blog

  • October 19, 2008

NetBeans Platform APIs: Top 10 Greatest Hits

Geertjan Wielenga
Product Manager
In the first place, the NetBeans Platform is a runtime container for desktop applications, comparable to an application server for web applications. Both handle common concerns, such as lifecycle management, for their target application type. However, secondly, the NetBeans Platform is a set of libraries.

In my (humble) opinion, these are the top 10 libraries offered by the NetBeans Platform APIs:

  1. Module System API. Enables the modular structure of NetBeans Platform applications. In the NetBeans sources, see package "org.openide.modules". Start reading about it here.

  2. Window System API. Enables you to create an application with advanced logical window functionality, such as drag/drop, dock/undock, maximize/minimize. In the NetBeans sources, package "org.openide.windows". Start reading about it here.

  3. Lookup API. Enables communication between modules similarly to the ServiceLoader class in JDK 6, as well as the context sensitivity of windows, nodes, and data objects in the application. This API can also be used outside the NetBeans Platform. In the NetBeans sources, package "org.openide.util.lookup". Start reading about it here.

  4. File System API. Enables the modules in an application to communicate by means of a virtual file system which is, by default, a hierarchical structure of folders and files defined in XML documents. In the NetBeans sources, package "org.openide.filesystems". Start reading about it here.

  5. Nodes API. Enables you to provide visual representations of underlying objects, i.e., these are NetBeans Platform JavaBeans. This API can also be used outside the NetBeans Platform. In the NetBeans sources, package "org.openide.nodes". Start reading about it here.

  6. Explorer & Property Sheet API. Enables you to render nodes in one of several NetBeans Platform Swing components that are, via the NetBeans ExplorerManager, loosely coupled to the rendered nodes. This API can also be used outside the NetBeans Platform. In the NetBeans sources, package "org.openide.explorer".
    Start reading about it here.

  7. Datasystems API (also known as "Loaders API"). Enables custom file types to be represented in the application. If the application does not make use of custom file types, this API can be ignored. In the NetBeans sources, package "org.openide.loaders". Start reading about it here.

  8. Actions API. Enables you to include actions that can be hooked up to menu items and toolbar buttons in your application, where you can define them as being always available or context sensitively enabled. In the NetBeans sources, package "org.openide.actions", with the related package "org.openide.util.actions". Start reading about it here.

  9. Visual Library API. Enables you to add widgets to your application, with common functionality, such as 'zoom' and 'move' provided out of the box. This API can also be used outside the NetBeans Platform. In the NetBeans sources, package "org.netbeans.api.visual". Start reading about it here.

  10. What do you think..?

I doubt that there'll be much argument about the top 9 listed above (apart from, possibly, the Datasystems API, which those who don't use custom file types are probably not using; and potentially someone will argue that the whole 'runtime container' should be included in the first item, rather than just the Module System API). But... what should no. 10 be? Options? I/O? Common Palette? Something else? Suggestions (with justifications!) welcome.

Join the discussion

Comments ( 19 )
  • Varun Sunday, October 19, 2008

    You missed Lexer API..

    Also, how about adding Top 10 enhancements in 10th spot-


  • Geertjan Monday, October 20, 2008

    Lexer isn't part of the NetBeans Platform. It is part of NetBeans IDE and, since it is a module, can be reused on the NetBeans Platform. The point of this article is to focus on the NetBeans Platform's modules, not some application created on top of it.

  • Varun Monday, October 20, 2008

    Geertjan, Thanks for the update. I was not aware of that..

  • Tom Wheeler Monday, October 20, 2008

    You mentioned Lookup, which IMHO is the greatest hit of all because it enables loose coupling between modules and allows you to replace implementations of many core NetBeans services with your own implementation if you like. It's part of the Utilities API, but there are many other things in the Utilities API that are extremely valuable for Swing application development.

    Even if you're not using the NetBeans Platform, you can still just drop the org-openide-util.jar into the classpath of a standalone Swing application and gain the benefits of Lookup, plus other helpful things like Mutex, Parameters, RequestProcessor and WeakListeners. Plus, the utilities class itself has a lot of handy convenience methods for determining the operating system, image loading and manipulation, centering screen components and object comparison. In other words, it's the same things you wind up writing your own convenience classes and methods for, but these have been written by others -- and more importantly, they've generally been tested under a wide range of conditions over the years.

  • Geertjan Wielenga Monday, October 20, 2008

    Good points. So, maybe the Utilities API should take the no. 10 spot? Lookup API is part of it, but you highlight various other parts of its parent API (and you can't get Lookup API without Utilities API, plus Utilities API is part of the runtime container). For these reasons, it seems to me that Utilities API needs to be included in the top 10 list. I agree also that Lookup API needs to be higher up, above Window System API. But... to put it above Module System API seems wrong to me.

  • Adam Skalny Thursday, October 23, 2008

    Wow! I've just seen your screen cast on this topic on netbeans.tv ... it's fantastic. Please keep up and cover all ten API's mentioned.

  • Geertjan Wielenga Friday, October 24, 2008

    Definitely Adam. Hopefully part 2 will go up today. If not, it will be there early next week. Thanks for your support!

  • eric abd hal Sunday, November 16, 2008

    I found that PROPERTYSHEET api only working with nodes.


    public class MyNode extends AbstractNode {



    protected Sheet createSheet() {




    Is that any way the createsheet method could be called without extends the AbstractNode. Or maybe you have another option to create propertysheet in different way.

    My idea is I want to display data from datagrid(on select or click) to properties window so user can update it directly without going to another form, or open another frame, etc.

    thanks lot.

  • Steven Tuesday, November 18, 2008

    This is all great information. Is there any way we can download the videos for offline viewing? The best time I have to watch these is during my commute on the train, but I can't get a fast enough connection for watching video.

    I'm really looking to get into NetBeans RCP development for a couple of personal projects and I might push it at the company I work for if all goes well.

  • Neil Tuesday, January 27, 2009

    Hi, Geertjan.

    This sieries is great, I have downloaded 1-7 thus far and can't wait for the rest. Do you have a estimated timeline as to when the rest will be available?


  • TimSparg Tuesday, April 28, 2009

    Hi Geertjan

    First off a big thank you for creating this series of tutorials, I'm sure they will be of benefit to a great many people (myself included)

    Unfortunately I have come across a problem, I would like to download the videos, as my internet is to slow to watch them (and there's nothing more irritating then a stutterng video!)

    I did see that you got the series hosted at www.mediacast.sun.com, however this has its own problems, as the server does not support download resuming and the connection keeps on dropping!

    Is there anyway that you could host the videos somewhere else?


  • Hans-Peter Dollhopf Monday, May 25, 2009

    Hallo Neil,

    direct download links:


  • Krishna Tuesday, September 28, 2010

    Hi, Geertjan

    I know how to use BeanTreeView to render a tree based structure in to the top component.

    But how to get a table in to topcompnent. Do we have any view that supports table like beanTreeView.. ???

    If so can you please post a small example snippet on this .. !??



  • Alex137 Sunday, May 24, 2015

    Hi! Old post but I'm still interested by what libraries can be used outside of NetBeans platform. In particular, how can org.openide.windows be used in a standalone application?

    Thanks, -- Alex

  • Geertjan Sunday, May 24, 2015

    I doubt that's a good idea to use org.openide.windows outside the NetBeans Platform. Take a look at JIDE instead or JDoggy as well as many others, including open source windowing frameworks.

  • Alex137 Sunday, May 24, 2015

    Hi Geertjan!

    Thanks for this quick answer. Unfortunately, I can't afford JIDE and MyDoggy doesn't look much alive (hasn't been updated since 2010 with a "1.5.0-beta1" version). I've surveyed other open source windowing frameworks and I haven't found any that looks active and working well.

    On the other hand, Netbeans platform is actively maintained and the docking framework UX looks excellent.

    Could you elaborate why you think it's a good idea to try to use org.openide.windows outside NBP?

    On my side, let me explain why I'm reluctant to climb the full NBP wagon. Much of it is perhaps just perception so don't hesitate to correct where I'm wrong:

    - My application is an internal tool that grew from a simple Swing application and is now in need of docking windows. It is currently directly built and run by the users, using Maven

    - NBP looks pretty much tied to NetBeans and my coworkers are 80% Eclipse, 20% Idea. I don't mind switching to NB, but I still want the colleagues to be able to contribute, i.e., change code and run immediately from Eclipse/Idea. Do you think this can achieved, like starting the app/modules structure in NB and then import everything in Eclipse/Idea? The important point that it remains super simple for my colleagues.

    - I need to remove almost all menus and toolbars added by default and this doesn't look so straighforward. Most of them don't make sense in my app. I'm aware of https://blogs.oracle.com/geertjan/entry/simplified_usage_of_the_netbeans, but this is using layer.xml, which is no longer generated by NB8 because annotations are now used. So, now, I have to learn how this transposes to annotations and documentation is scarce. For example, http://wiki.netbeans.org/DevFaqSystemFilesystem doesn't even mention annotations

    Thanks for your help, -- Alex

  • Geertjan Sunday, May 24, 2015

    Indeed, I am not going to have a long discussion in my blog about this point. Like any other person, you can join the mailing list and do your discussion there, where there are many more than just me to participate in the discuussion with you:


  • Geertjan Sunday, May 24, 2015

    Also, quite a lot of misunderstandings in what you write (e.g., about menus and toolbars) can be easily solved if you get the book:


  • Geertjan Sunday, May 24, 2015

    PS: If you use Maven, you can open and run your project in any IDE that supports Maven, which includes Eclipse, NetBeans, and IDEA.

Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.