Releases for Substance, Flamingo and more
September 15th, 2008 | 20 Comments »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:
- Substance plugin for SwingX component suite build 1183 from August 31. See test application.
- Substance plugin for Flamingo component suite 3.1. See test applications.
- Substance plugin for JIDE common components 2.3.0. Provides support for JIDE button and JIDE split button components in this release.
- Substance Extras pack.
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:
- Release candidates for Trident, Flamingo and Substance I’ve just published the release candidates for the following projects: Trident 1.3 (code-named Diamond In...
- Improving the integration between Substance and Flamingo When two products are developed by the same company / team / a lonely guy...
- Flamingo ribbon component and Substance decoration painters The ribbon component is one the major building blocks of the Flamingo component suite. It...
- Release candidate for Flamingo 3.1 I am happy to announce release candidate for version 3.1 (code-named Eilinora) for Flamingo component...
It seems there is a problem when I try to download Flamingo:
Fatal error
No folder with ID 6931 exists.
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
Congratulations Kirill!
I like your projects so much
Thank you
alexp
The broken link has been fixed.
Thanks
Kirill
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 ‘ .
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?
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
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?
Register for java.net (free), ask an Observer role on the project and you will be able to open an issue.
Thanks
Kirill
Thanks a lot, i have already registed successfully.
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)
Dennis,
Please post a small (<100 lines) application in the project issue tracker so that it can get fixed.
Thanks
Kirill
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)
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
Thanks. But Can you provide us with examples and source codes of how to use the component correctly?!!
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
I’m still got error in latest 5.0 release.
java.lang.IllegalStateException: Substance delegate used when Substance is not the current LAF!
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.
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)
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