Releases for Substance, Flamingo and more

I am extremely pleased today to announce the availability of official releases for a number of my Swing projects. Synchronizing the release schedules for these projects allows the applications to take stable and well-tested libraries that allow creating modern user interfaces.

Flamingo component suite release 3.1 (code-named Eilinora) is available. The goal of the project is to provide a small and cohesive set of powerful UI components with functionality similar to or superseding that of Vista Explorer and Office 2007, and this release closes many gaps towards realizing this goal. The release notes have the detailed description of the new functionality. Noteable features include:

  • Improvements to SVG transcoder, allowing creating resizable icons. This is used in the new ribbon demoes to make significant performance improvements to the startup phase.
  • Contextual task groups on the ribbon component.
  • Dynamic content of in-ribbon galleries.
  • Decorating the ribbon under Substance plugin, putting the taskbar and contextual task group headers on the title pane.
  • Resizable icons based on .ICO format.
  • Command buttons supporting disabled mode, changing text and changing font.
  • Auto-repeat mode on command buttons.
  • Column-fill mode on command button panels.

Substance look-and-feel release 5.0 is available. Substance has undergone significant internal and external changes to address major performance issues and to ensure the long-term code health of the project. Here is the list of big changes in Substance 5.0:

  • Moving to Java 6 as the minimum runtime requirement.
  • Addressing the performance issues. While the first announced drop was 20% faster than release 4.3, the release candidate is 3.5 times faster on static scenarios and 2.7 times faster on dynamic scenarios as measured by the LightBeam testbed.
  • New client property to allow using per-window skins.
  • Enhanced theming layer.
  • Removed 16 VM flags and left only 2.
  • Removed 15 client properties, consolidated 3 others into 2 and added 1 new.
  • Removed 54 API methods on the main class, pushing some functionality into the theming layer.
  • Consolidated theme pack, watermark pack and button shaper pack into the Extras pack that also provides additional skins.

The following sub-projects are also available as official releases:

Version 4.3 of Substance (the last version that can run on Java 5) is in long-term support mode. At the present moment this version has thirteen bug fixes backported to it from the main development trunk.

Click on the button below to launch a signed WebStart demo that shows the available Substance features:

Click on the button below to launch a WebStart demo that shows the Flamingo ribbon component under Substance look-and-feel:

Click on the button below to launch a signed WebStart demo that shows the SwingX components under Substance:

In addition to Substance and Flamingo that can be used directly by applications, the following projects haven also been officially released:

  • Laf-Plugin release 1.0 (code-named Vile Weed) is available. The goal of this project is to provide a generic plugin framework for look-and-feels and define the interface of a common kind of plugins – the component plugins.
  • Laf-Widget release 4.0 (code-named Iris) is available. The goal of this project is to provide support for and base set of additional behaviour and widgets in look-and-feels.
  • Rainbow release 1.1 (code-named Nightstone) is available. The goal of this project is to illustrate various animation, transition and translucency techniques.

It has been a long journey. Flamingo 3.1 development has started in February, and i would like to thank Gunnar A. Reinseth, Pedro Duque Vieira, Kenneth Flynn in particular for their invaluable feedback during the development cycle. Substance 5.0 development has started in April, and i would like to thank all the early adopters for testing the development drops and providing their feedback in the project forums and mailing lists.

The work on both Flamingo and Substance is not finished. The plans for the next Flamingo release are available at the end of this entry, and plans for the next Substance releases will be published on this blog. If you are interested in using Substance to its fullest potential, you’re welcome to read the “From Photoshop to code” series.


Related posts:

  1. Flamingo ribbon component and Substance decoration painters The ribbon component is one the major building blocks of the Flamingo component suite. It...
  2. Release candidate for Flamingo 3.1 I am happy to announce release candidate for version 3.1 (code-named Eilinora) for Flamingo component...
  3. Release candidate for Flamingo 4.0 I am extremely pleased today to announce the availability of release candidate for version 4.0...
  4. Flamingo 4.0 official release I am extremely pleased today to announce the official release for version 4.0 of Flamingo...


20 Responses to “Releases for Substance, Flamingo and more”

  • Kostas Says:

    It seems there is a problem when I try to download Flamingo:

    Fatal error

    No folder with ID 6931 exists.

  • Kostas Says:

    OK, I figured it out, you should change the download link at the main page to https://flamingo.dev.java.net/servlets/ProjectDocumentList?folderID=8936

  • Alexander Potochkin Says:

    Congratulations Kirill!

    I like your projects so much

    Thank you
    alexp

  • Kirill Grouchnikov Says:

    The broken link has been fixed.

    Thanks
    Kirill

  • 王伟光 Says:

    hi,kirill:

    i am glad to see your blog,it is wonderful and perfect! i have a question : why my swing application developed by NetBean6.0 can not work with substance well ? it always speaks ‘ Exception in thread “AWT-EventQueue-0″ java.lang.IllegalStateException: Substance delegate used when Substance is not the current LAF ‘ .

  • 王伟光 Says:

    but,i do not use NetBean’s JFrame generator, and write a class that extends JFrame by myself,it can work well in NetBean. in addition, if i use NetBean’s JFrme generator to create a JFrame and don’t add any component,it can works. i don’t know why?

  • Kirill Grouchnikov Says:

    Please file an issue on the project issue tracker and attach a small (<100 lines) test application that illustrates the problems that you’re having.

    Thanks
    Kirill

  • 王伟光 Says:

    i am so sorry to trouble you again, becase of no privilege,i can not file the issue on the project issue tracker.where can i file my problem code.May
    i send it to your email?

  • Kirill Grouchnikov Says:

    Register for java.net (free), ask an Observer role on the project and you will be able to open an issue.

    Thanks
    Kirill

  • 王伟光 Says:

    Thanks a lot, i have already registed successfully.

  • dennis noto Says:

    Trying to integrate your jribbon component into another application that already has a jframe. I tried extending the other applications jframe to your Jribbonframe but the code gets null pointers when entering your layoutContainer. Any suggestions? After bugging the problem i can see that ribbon.getSelectedTask() is null. Exception below.

    Exception in thread “AWT-EventQueue-0″ java.lang.NullPointerException
    at org.jvnet.flamingo.ribbon.ui.BasicRibbonUI$RibbonLayout.layoutContainer(BasicRibbonUI.java:655)
    at java.awt.Container.layout(Container.java:1432)
    at java.awt.Container.doLayout(Container.java:1421)
    at java.awt.Container.validateTree(Container.java:1519)
    at java.awt.Container.validateTree(Container.java:1526)
    at java.awt.Container.validateTree(Container.java:1526)
    at java.awt.Container.validateTree(Container.java:1526)
    at java.awt.Container.validateTree(Container.java:1526)
    at java.awt.Container.validate(Container.java:1491)
    at java.awt.Window.dispatchEventImpl(Window.java:2438)
    at java.awt.Component.dispatchEvent(Component.java:4243)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

  • Kirill Grouchnikov Says:

    Dennis,

    Please post a small (<100 lines) application in the project issue tracker so that it can get fixed.

    Thanks
    Kirill

  • Hazem Says:

    Here is an example (just a sample):

    package testing;

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.UnsupportedLookAndFeelException;
    import org.jvnet.flamingo.ribbon.JRibbon;

    public class RibbonTest extends JFrame{

    public RibbonTest() {
    JRibbon ribbon = new JRibbon();
    ribbon.addTaskbarComponent(new JButton(“Welcome”));
    this.add(ribbon);
    setSize(800, 600);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    }

    public static void main(String[] args) throws UnsupportedLookAndFeelException {

    new RibbonTest();
    }

    }

    this code results in an exception:
    Exception in thread “main” java.lang.NullPointerException
    at org.jvnet.flamingo.ribbon.ui.BasicRibbonUI$RibbonLayout.layoutContainer(BasicRibbonUI.java:655)
    at java.awt.Container.layout(Container.java:1398)
    at java.awt.Container.doLayout(Container.java:1387)
    at java.awt.Container.validateTree(Container.java:1485)
    at java.awt.Container.validateTree(Container.java:1491)
    at java.awt.Container.validateTree(Container.java:1491)
    at java.awt.Container.validateTree(Container.java:1491)
    at java.awt.Container.validateTree(Container.java:1491)
    at java.awt.Container.validate(Container.java:1457)
    at java.awt.Window.show(Window.java:843)
    at java.awt.Component.show(Component.java:1447)
    at java.awt.Component.setVisible(Component.java:1400)
    at java.awt.Window.setVisible(Window.java:824)
    at testing.RibbonTest.(RibbonTest.java:21)
    at testing.RibbonTest.main(RibbonTest.java:26)
    Exception in thread “AWT-EventQueue-0″ java.lang.NullPointerException
    at org.jvnet.flamingo.ribbon.ui.BasicRibbonUI$RibbonLayout.layoutContainer(BasicRibbonUI.java:655)
    at java.awt.Container.layout(Container.java:1398)
    at java.awt.Container.doLayout(Container.java:1387)
    at java.awt.Container.validateTree(Container.java:1485)
    at java.awt.Container.validateTree(Container.java:1491)
    at java.awt.Container.validateTree(Container.java:1491)
    at java.awt.Container.validateTree(Container.java:1491)
    at java.awt.Container.validateTree(Container.java:1491)
    at java.awt.Container.validate(Container.java:1457)
    at java.awt.Window.dispatchEventImpl(Window.java:2456)
    at java.awt.Component.dispatchEvent(Component.java:4331)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

  • Kirill Grouchnikov Says:

    Hazem,

    This issue should already be fixed in the latest 4.0dev drops of Flamingo. If you find other bugs in Flamingo or Substance, i would appreciate seeing the reports / stack traces / sample programs in the issue trackers / user mailing lists of the projects. Commenting on blog entries is not very good to track the progress of bug handling.

    Thanks
    Kirill

  • Hazem Says:

    Thanks. But Can you provide us with examples and source codes of how to use the component correctly?!!

  • Kirill Grouchnikov Says:

    Start from the “Learn” link on the main project page. The full source code for the test app can be found in the test.ribbon package in the flamingo-all.zip and the CVS repository.

    Thanks
    Kirill

  • MethoD Says:

    I’m still got error in latest 5.0 release.

    java.lang.IllegalStateException: Substance delegate used when Substance is not the current LAF!

  • Kirill Grouchnikov Says:

    MethoD, please file an issue in the project issue tracker and attach a complete small (<100 lines) application that illustrates the problems that you’re having.

  • beginner Says:

    Flamingo looks great but I dunno how to get it work! I tried to create a JRibbonFrame but always get an exception and the program can’t run even though it compile without error. I’m a beginner so please explain in details how to make a frame with ribbon. I took a look at the “learn” link but it didn’t seem to help. It just showed how to create a ribbon but not how to attach it to a frame! And the zip file just contains the document without any example! Please help, thanks a lot lot lot.

    Here is the code that give the exception:

    import java.awt.*;
    import javax.swing.*;
    import org.jvnet.flamingo.ribbon.*;

    public class Sample{

    /**
    * @param args
    */

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    EventQueue.invokeLater(new Runnable() {
    public void run()
    {
    SampleFrame f = new SampleFrame(“My Frame”);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
    });
    }

    }

    class SampleFrame extends JRibbonFrame {
    public SampleFrame(String title)
    {
    super(title);
    setSize(400,300);
    }
    }

    Exception in thread “AWT-EventQueue-0″ java.lang.NullPointerException
    at org.jvnet.flamingo.ribbon.ui.BasicRibbonUI$RibbonLayout.preferredLayoutSize(BasicRibbonUI.java:533)
    at java.awt.Container.preferredSize(Unknown Source)
    at java.awt.Container.getPreferredSize(Unknown Source)
    at javax.swing.JComponent.getPreferredSize(Unknown Source)
    at java.awt.BorderLayout.layoutContainer(Unknown Source)
    at java.awt.Container.layout(Unknown Source)
    at java.awt.Container.doLayout(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validate(Unknown Source)
    at java.awt.Window.show(Unknown Source)
    at java.awt.Component.show(Unknown Source)
    at java.awt.Component.setVisible(Unknown Source)
    at java.awt.Window.setVisible(Unknown Source)
    at Sample$1.run(Sample.java:18)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Exception in thread “AWT-EventQueue-0″ java.lang.NullPointerException
    at org.jvnet.flamingo.ribbon.ui.BasicRibbonUI$RibbonLayout.preferredLayoutSize(BasicRibbonUI.java:533)
    at java.awt.Container.preferredSize(Unknown Source)
    at java.awt.Container.getPreferredSize(Unknown Source)
    at javax.swing.JComponent.getPreferredSize(Unknown Source)
    at java.awt.BorderLayout.layoutContainer(Unknown Source)
    at java.awt.Container.layout(Unknown Source)
    at java.awt.Container.doLayout(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validateTree(Unknown Source)
    at java.awt.Container.validate(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

  • Kirill Grouchnikov Says:

    Please repost this question to the Flamingo forums or mailing lists. In general, you would have to add at least some content to the ribbon. The documentation is still for the previous release and will be updated once all the functional gaps are closed. In the meantime, you can see the code for the test application in the test.ribbon.BasicCheckRibbon class.

    Thanks
    Kirill