|
|
Question 1 | Can i use some / all of the code in Substance? |
Answer | Substance is released under BSD license. You are free to modify any part of the code as long as you mention the original license in the source code / the runnable distribution. |
|
|
Question 2 | Can i create my own look-and-feel on top of Substance? |
Answer | There are two supported ways of extending Substance.
To create a custom look for branding your application, start by reading the
skinning documentation and the code of the
core skins in the While you can extend the UI delegates in the
|
|
|
Question 3 | What is the policy for backwards binary and visual compatibility? |
Answer | I will do my best not to break the APIs exposed
in the Classes in the
There are no guarantees about visual compatibility between major or minor releases. Core painters and skins undergo routine reexamination to address visual flaws, add polish and remove unnecessary visual noise. If your application requires absolute visual backwards compatibility, it is recommended to create a custom skin that does not extend any of the existing core Substance skins. |
|
|
Question 4 | Is it possible to backport Substance to 1.4 or 5.0? |
Answer | The current capabilities of tools such as Retrotranslator and Retroweaver do not support the new Java 5.0 and 6.0 classes and functions that Substance is using. In addition, a lot of UI-related bugs were fixed in JDK 6.0. |
|
|
Question 5 | I like some of the features, but the jar size is too big. How can i get a smaller runnable? |
Answer | In short - if you like the features, you pay the price. In long - you have a number of options:
Substance provides not only a highly configurable "look" part. It also adds significant amount of features to the core Swing components. If you need this functionality, you can either use third-party components, write the functionality yourself or take Substance. In any case these features have to reside somewhere in the classpath. Having them in Substance enables you to use well-tested additional "feel" part of the core Swing components. |
|
|
Question 6 | Why are you breaking my application by enforcing the creation and modification of components on the Event Dispatch Thread (EDT)? |
Answer | This has been introduced in version 5.0, and is being extended in every subsequent release. The answer to this question can be found on the "Pushing Pixels" blog in entry from July 2008 and in entry from February 2010. |
|
|
Question 7 | Scrolling and moving windows leaves the watermark in inconsistent state. Is it a bug? |
Answer | No, it's by design. Swing does not repaint the component on every event while scrolling or moving the windows / frames / dialogs. Try it and watch the CPU go berserk. As by default the Substance watermarks are screen-bound, you may (and will) experience the watermark inconsistency. Here are some things you can do:
|
|
|
Question 8 | I use an image-based watermark in my application / applet and don't see it. Is it a bug? |
Answer | By default, all Substance watermarks are screen-bound (also true under multiple screens). This is in order to enable smooth and seamless operation of applications that use multiple frames / dialogs. In addition, this allows to blend Substance-based applications on desktops with matching backgrounds. Specifically for image-based watermarks this may present a visual problem if the specified (local or remote) image is smaller than the screen (one or both dimensions). In this case the image is not enlarged and is centered in the middle of the screen. Unless your application is situated properly, the visual result is "no watermark". In order to amend the situation you will need to provide a larger image. Two notes:
|
|
|
Question 8 | I don't like Substance. |
Answer | That's not really a question. If you don't like it, you can either help improve it by suggesting additional features in the forums and mailing lists, or use any other core or third-party look-and-feel. Here is an excellent list of all currently available third-patry LAFs. |
|
|
Question 10 | I requested the Project Owner / Developer / Content Developer role in this project. Why did you reject my request? |
Answer | Look-and-feel in general and Substance in particular require fairly advanced knowledge of Swing. This is not a playground / sandbox for experimenting with Swing - Substance aims to be a production-quality alternative to core and other third-party LAFs. As you wouldn't want a total stranger to be a part of your production team, you need first to establish yourself a worthy addition to this (or any other) project. You can start by requesting the Observer role, suggest new features, learn Substance codebase and propose ways to implement new features. After you show your skill and the will to stick with this project, you can expect a serious thought invested in answering the request for the Developer role. In addition, there is no need for Content Developer role in this project since I'm quite capable of maintaining a static HTML site by myself. The Project Owner role is granted only after certified analysis by three independent doctors that shows that the requester is in a lucid state of mind. |
|
|
Question 11 | Are there any known issues in Substance? |
Answer | See the known issues documentation. If you find an issue not mentioned in the above document, you can report it in either issue tracker, mailing lists, forums or direct mail to {kirillcool [@at@] yahoo [.dot.] com}. |
|
|
Question 12 | How can i use Substance on Mac and still have the standard Mac application menu bar? |
Answer | The global Mac application menu bar is available only under menu UI delegates from the native Aqua look-and-feel. There are two options to have this functionality in your application.
|
|
|
Question 13 | I use animated GIFs as icons on internal frames and the CPU usage goes berserk (100% maxed out). Some parts of the application do not get repainted at all. What do i do? |
Answer | When an animated GIF is set as an internal frame icon, the entire
desktop pane is repainted on the GIF frame sequencing - not only the icon, not only the frame title pane
and even not only that internal
frame. Since Substance is much more CPU-intensive than Metal / Windows (it is partially addressed
with the image caching), this results in severe CPU bottlenecks and refresh glitches on some controls.
The call to The best advice is to not use animated GIFs as icons. Thanks to Martin Clifford for pointing out this issue. |
|
|
Question 14 | What's going on with my cell renderers? |
Answer | By design, Substance provides default renderers for trees, tables and lists that provide the following functionality:
This functionality is only available on default Substance renderers
in the If you want to change the default animation settings on your lists, tables and trees (for example, to disable core Substance animations on custom application renderers) please consult the animation primer. |
|
|
Question 15 | Is there support for custom tab components in Java 6? |
Answer | Substance does not support custom tab components specified by the JTabbedPane.setTabComponentAt API. |
|
|
Question 16 | Can i use Substance only for some parts of my UI? |
Answer | No. Substance in particular, and Java look and feels in general are not designed to be installed in the "mix and match" fashion. |
|
|
Question 17 | How do i make Substance to paint the title panes? |
Answer | In case you wish to use cross-platform frame and dialog decorations, use the following before you instantiate your first top-level window: JFrame.setDefaultLookAndFeelDecorated(true); and JDialog.setDefaultLookAndFeelDecorated(true);. This, however, causes flicker on resize due to a known Swing bug. For Windows, there is a workaround, using System.setProperty("sun.awt.noerasebackground", "true");. You can set this property along with the above two lines. |
|
|
Question 18 | I'm using setOpaque() method and i see visual artifacts in my UI |
Answer | Do not change the opacity of controls painted by Substance in the application code. Doing so will lead to unpredictable visual results at runtime. |
|