Company News

<< Previous PageNext Page >>

Announcing Synthetica V3 RC1(18:48, 30. Oct. 2017)

We are pleased to announce the first release candidate of Synthetica V3.0.0.

Features

As you maybe know Synthetica V3 comes along with some great new features:

  • High-resolution support
  • Scalability support
  • JPMS (Java module system) support
  • New modern/flat styled dark theme

Synthetica Dark Theme Screenshot

Release Date

The final release is rescheduled for November 2017.

Modules

For being JPMS compatible the package structure in V3 was reorganized, which also means that V3 is no longer backward compatible. However, class names are unchanged so your preferred IDE should be able to easily update all package imports of your application. The module name of Synthetica's core library synthetica.jar is synthetica.base.

The module names of our themes are listed below - each theme library has an unique module name.

Synthetica Dark theme           ->  synthetica.theme.dark
Synthetica Plain theme          ->  synthetica.theme.plain
Synthetica BlueLight theme      ->  synthetica.theme.bluelight
Synthetica AluOxide theme       ->  synthetica.theme.aluoxide
Synthetica Classy theme         ->  synthetica.theme.classy
Synthetica BlackEye theme       ->  synthetica.theme.blackeye
Synthetica Simple2D theme       ->  synthetica.theme.simple2d
Synthetica WhiteVision theme    ->  synthetica.theme.whitevision
Synthetica SkyMetallic theme    ->  synthetica.theme.skymetallic
Synthetica MauveMetallic theme  ->  synthetica.theme.mauvemetallic
Synthetica OrangeMetallic theme ->  synthetica.theme.orangemetallic
Synthetica BlueSteel theme      ->  synthetica.theme.bluesteel
Synthetica BlackMoon theme      ->  synthetica.theme.blackmoon
Synthetica BlueMoon theme       ->  synthetica.theme.bluemoon
Synthetica SilverMoon theme     ->  synthetica.theme.silvermoon
Synthetica BlueIceMoon theme    ->  synthetica.theme.blueice
Synthetica GreenDream theme     ->  synthetica.theme.greendream
Synthetica BlackStar theme      ->  synthetica.theme.blackstar
Synthetica Standard theme       ->  synthetica.theme.standard

For proper execution without any errors/warnings make sure to pass the arguments below to the JVM.

--add-exports=java.desktop/sun.swing=synthetica.base
--add-exports=java.desktop/sun.swing.table=synthetica.base
--add-exports=java.desktop/sun.swing.plaf.synth=synthetica.base
--add-opens=java.desktop/javax.swing.plaf.synth=synthetica.base
--add-opens=java.desktop/javax.swing.plaf.basic=synthetica.base
--add-opens=java.desktop/javax.swing=synthetica.base
--add-opens=java.desktop/javax.swing.tree=synthetica.base
--add-opens=java.desktop/java.awt.event=synthetica.base
--add-exports=java.desktop/sun.awt.shell=synthetica.base
--add-exports=java.desktop/com.sun.awt=synthetica.base
--add-exports=java.base/sun.security.action=synthetica.base

Legacy Mode

Of course you are not forced to use the new module system. You can simply use our libraries as usual by specifying a classpath. However, in this case you have to use the JVM arguments below to avoid any errors/warnings.

--add-exports=java.desktop/sun.swing=ALL-UNNAMED
--add-exports=java.desktop/sun.swing.table=ALL-UNNAMED
--add-exports=java.desktop/sun.swing.plaf.synth=ALL-UNNAMED
--add-opens=java.desktop/javax.swing.plaf.synth=ALL-UNNAMED
--add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED
--add-opens=java.desktop/javax.swing=ALL-UNNAMED
--add-opens=java.desktop/javax.swing.tree=ALL-UNNAMED
--add-opens=java.desktop/java.awt.event=ALL-UNNAMED
--add-exports=java.desktop/sun.awt.shell=ALL-UNNAMED
--add-exports=java.desktop/com.sun.awt=ALL-UNNAMED
--add-exports=java.base/sun.security.action=ALL-UNNAMED

Alternatively, you can put the arguments into the manifest.mf file of your application by adding the attributes below. This is the recommended method for deployment of your application. However, this works only if your application is executed as jar file in legacy mode. Web Start does not respect these entries - in this case you have to use the JVM arguments from above.

Add-Exports: java.desktop/sun.swing java.desktop/sun.swing.table java.desktop/sun.swing.plaf.synth java.desktop/com.sun.java.swing.plaf.windows java.desktop/sun.awt.shell java.desktop/com.sun.awt java.base/sun.security.action   
Add-Opens: java.desktop/javax.swing.plaf.synth java.desktop/javax.swing.plaf.basic java.desktop/javax.swing java.desktop/javax.swing.tree java.desktop/java.awt.event 

Theme Classes

All theme packages have been reorganized for being JPMS compliant (no split-packages). A complete list of available theme classes can be found below. Note: In Synthetica V3 the core library (synthetica.jar) contains Synthetica core files only, no themes. Since V3 the standard theme is not any longer part of the core library!

de.javasoft.synthetica.aluoxide.SyntheticaAluOxideLookAndFeel 
de.javasoft.synthetica.blackeye.SyntheticaBlackEyeLookAndFeel 
de.javasoft.synthetica.blackmoon.SyntheticaBlackMoonLookAndFeel 
de.javasoft.synthetica.blackstar.SyntheticaBlackStarLookAndFeel 
de.javasoft.synthetica.blueice.SyntheticaBlueIceLookAndFeel
de.javasoft.synthetica.bluelight.SyntheticaBlueLightLookAndFeel 
de.javasoft.synthetica.bluemoon.SyntheticaBlueMoonLookAndFeel
de.javasoft.synthetica.bluesteel.SyntheticaBlueSteelLookAndFeel 
de.javasoft.synthetica.classy.SyntheticaClassyLookAndFeel
de.javasoft.synthetica.dark.SyntheticaDarkLookAndFeel
de.javasoft.synthetica.greendream.SyntheticaGreenDreamLookAndFeel
de.javasoft.synthetica.mauvemetallic.SyntheticaMauveMetallicLookAndFeel
de.javasoft.synthetica.orangemetallic.SyntheticaOrangeMetallicLookAndFeel
de.javasoft.synthetica.plain.SyntheticaPlainLookAndFeel
de.javasoft.synthetica.silvermoon.SyntheticaSilverMoonLookAndFeel
de.javasoft.synthetica.simple2d.SyntheticaSimple2DLookAndFeel
de.javasoft.synthetica.skymetallic.SyntheticaSkyMetallicLookAndFeel
de.javasoft.synthetica.standard.SyntheticaStandardLookAndFeel
de.javasoft.synthetica.whitevision.SyntheticaWhiteVisionLookAndFeel
 

Product Links

Synthetica V2.30.0 / SyntheticaAddons V1.12.0 released!(12:00, 29. Sep. 2017)

We are pleased to announce the release of Synthetica V2.30.0 and SyntheticaAddons V1.12.0. A complete list of changes can be found at the Synthetica changelog and the SyntheticaAddons changelog. The updates mainly cover Java 9 support in legacy mode - means Synthetica 2.X.X/SyntheticaAddons 1.X.X do not completely support the Java Module System (JPMS). If JPMS support is required you should consider to switch to V3.

When running on Java 9 you have to pass the arguments below to the JVM for proper execution without any errors/warnings.

--add-exports=java.desktop/sun.swing=ALL-UNNAMED
--add-exports=java.desktop/sun.swing.table=ALL-UNNAMED
--add-exports=java.desktop/sun.swing.plaf.synth=ALL-UNNAMED
--add-opens=java.desktop/javax.swing.plaf.synth=ALL-UNNAMED
--add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED
--add-opens=java.desktop/javax.swing=ALL-UNNAMED
--add-opens=java.desktop/javax.swing.tree=ALL-UNNAMED
--add-opens=java.desktop/java.awt.event=ALL-UNNAMED
--add-exports=java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED
--add-exports=java.desktop/sun.awt.shell=ALL-UNNAMED
--add-exports=java.desktop/com.sun.awt=ALL-UNNAMED
--add-exports=java.base/sun.security.action=ALL-UNNAMED

Alternatively, you can put the arguments into the manifest.mf file of your application by adding the attributes below. This is the recommended method for the deployment of your application.

Add-Exports: java.desktop/sun.swing java.desktop/sun.swing.table java.desktop/sun.swing.plaf.synth java.desktop/com.sun.java.swing.plaf.windows java.desktop/sun.awt.shell java.desktop/com.sun.awt java.base/sun.security.action   
Add-Opens: java.desktop/javax.swing.plaf.synth java.desktop/javax.swing.plaf.basic java.desktop/javax.swing java.desktop/javax.swing.tree java.desktop/java.awt.event 

License

As you maybe know minor release updates are covered by the support subscription. For using the latest releases a new license key is required - please contact sales for getting a new license key or request a quote for the update in case you don't have a valid support subscription.

Product Links

Synthetica V3 – High-Resolution/HiDpi support(19:46, 28. Sep. 2017)

As you've learned in this article Synthetica V3 comes along with UI-scaling support for high-resolution displays. To let your application look as sharp as native applications Synthetica V3 also provides high-resolution support. What does this mean in detail?

High-Resolution/HiDpi API with support for multi resolution icons and images

On high resolution displays icons and images appear too small if not being upscaled. Synthetica's HiDpi class also provides some helper methods to let you create scalable icons/images. So your image based icons appear in the correct size because they will be upscaled until the required size is reached. But there's one drawback – quality. Because of the high density display stretched pixels move closer together so the result looks almost the same as on a regular screen. It isn't that bad but in comparison to other applications/icons the difference is noticeable. The solution is to provide multiple image files with different resolutions. Usually it's good enough to provide only one additional doubled sized image. For this HiDpi#createIcon(ClassresourceBase, String... fileNames) can take multiple image files.

HighResolution Screenshot

// Example:
// icon scaling without high-resolution
button.setIcon(HiDpi.createIcon(getClass(), "/resources/myIcon.png"));
// by adding a high resolution icon, multi-resolution support is enabled
button.setIcon(HiDpi.createIcon(getClass(), "/resources/myIcon.png", "/resources/myIcon@2x.png"));

The naming convention for high-resolution images/icons is to append '@2x' for double density (initially introduced by Apple for their Retina displays). Of course it is also possible to specify high-resolution images in the XML-file of a custom theme.

Font (vector) based icon library set

SyntheticaAddons V3 provides a font based icon library set with around 7.000 free icons. These icons are already scalable and because of their vector nature are still sharp in high-resolution mode. Our IconFontBrowser application helps you to find all required icons and generates the code for using within your own application.

IconFontBrowser Tool

IconFontBrowser Screenshot

High-Resolution Themes

As you maybe know most of our themes are based on image files. Synthetica provides high-resolution support by letting you specify additional images for the high-resolution mode within a theme. So if a theme already offers high-resolution images depends on the theme definition. Currently the themes listed below come along with build in high-resolution support.

  • SyntheticaDark (Synthetica V3 only)
  • SyntheticaPlain
  • SyntheticaSimple2D (Java2D based)
Product Links

Synthetica V3 - UI-Scaling support(20:30, 27. Sep. 2017)

Some modern displays offer high pixel density - commonly known as Ultra-HD, 4K, 5K or something similar. Without upscaling your application becomes almost unusable because it appears pretty tiny on these displays if not upscaled from the OS. In Synthetica 2.X.X a font scale factor can be set, so your application is still usable. However, for complete UI-scaling support Synthetica V3 is required. Which means all sizes, insets, gaps, dimensions, images, icons, font get scaled depending on the provided scale factor.

UI-scaling is enabled by specifying a percentage scale factor on application startup through the UI-property "Synthetica.scaleFactor".

//Example:
UIManager.put("Synthetica.scaleFactor", 200);
//UIManager.put("Synthetica.font.scaleFactor", 200);
UIManager.setLookAndFeel("de.javasoft.synthetica.dark.SyntheticaDarkLookAndFeel");

 

Regular (without any scale factor)

Regular Screenshot

FontScaleFactor 200
By specifying a font scale factor only font and font based icons of the toolbar will be scaled.

FontScaleFactor 200 Screenshot

ScaleFactor 200
Complete scaling - font, icons, insets, gaps, dimensions, sizes...

ScaleFactor 200 Screenshot

 

Most scaling is done under the hood, but sometimes you have to specify fixed size values in your application. To make these values scalable too, Synthetica's HiDpi class provides some static helper methods which can be used as value wrapper or replacement for constructors just like in the examples below.

//frame.setSize(new Dimension(800,600));
frame.setSize(HiDpi.scaleDimension(800,600));

//JPanel p = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 20));
JPanel p = new JPanel(new FlowLayout(FlowLayout.CENTER, HiDpi.scale(10), HiDpi.scale(20)));
...
//panel.setPreferredSize(new Dimension(400, 300));
panel.setPreferredSize(HiDpi.scaleDimension(400, 300));
...
//panel.add(Box.createVerticalStrut(10));
panel.add(Box.createVerticalStrut(HiDpi.scale(10)));
...
//taskPane.setTitleFont(new Font("Dialog", Font.BOLD, 14));
taskPane.setTitleFont(new Font("Dialog", Font.BOLD, HiDpi.scale(14)));
...
//gbc.insets = new Insets(5,5,5,5);
gbc.insets = HiDpi.scaleInsets(5,5,5,5);
...
//panel.setBorder(BorderFactory.createLineBorder(Color.RED));
panel.setBorder(HiDpi.createLineBorder(Color.RED));    
...
//panel.setBorder(BorderFactory.createEmptyBorder(4,4,4,4));
panel.setBorder(HiDpi.createEmptyBorder(4,4,4,4));

 

Icon Scaling

Generally icons also have fixed sizes - to make icons scalable the HiDpi class provides the wrapper method #createIcon(Icon icon) and additional methods (#createIcon(Class<?> resourceBase, String... fileNames)) for high resolution support. By specifying at least one high resolution icon, multi-resolution support is enabled. Which means depending on the size the best matching icon will be used automatically.

// use HiDpi wrapper to make an icon scalable
Icon myIcon = new ImageIcon(getClass().getResource("/resources/myIcon.png"));
button.setIcon(HiDpi.createIcon(myIcon))

// can be simplified with line below
button.setIcon(HiDpi.createIcon(getClass(), "/resources/myIcon.png"));

// by adding a high resolution icon, multi-resolution support is enabled
button.setIcon(HiDpi.createIcon(getClass(), "/resources/myIcon.png", "/resources/myIcon@2x.png"));

SyntheticaAddons V3 also provides a font based icon library set with around 7.000 free icons. These vector icons are already scalable and don't have to be wrapped. Our IconFontBrowser application helps you to find the needed icon and generates the code for using within your own application.

IconFontBrowser Tool

IconFontBrowser Screenshot

 

Swing UI-Scaling

As you maybe know since Java 9 you can also enable UI-scaling with the system property sun.java2d.uiScale and Swing UI-scaling is automatically enabled on high-resolution displays. However, we recommend to use Synthetica's UI-scaling feature because the setting can be stored in the XML-file of a theme and the scaling results are generally better. By using Swing UI-scaling some artifacts can appear, so it's actually recommended to disable Swing UI-Scaling in high-resolution/HiDpi environments by setting the system property sun.java2d.uiScale.enabled to false.

Product Links

Synthetica / SyntheticaAddons V3(15:47, 07. Sep. 2017)

The last major release has been announced eleven (11!) years ago, so it's finally time for the next generation – V3. Our general philosophy in version numbering is that we do major release changes only if backward compatibility is affected.

The main reason for this change is that we want to properly support JPMS – the module system of Java 9. However, this also means that we can't be backward compatible any longer, so we decided to switch to new major numbers to properly support Java 9 and upcoming Java releases.

Note: In case you have to be compatible to Java 6/7/8 you can use Synthetica V2.X.X and SyntheticaAddons V1.X.X. These releases are in maintenance mode and will be still supported. General Java 9 support in legacy mode (means without JPMS support) is given by the upcoming releases, Synthetica V2.30 / SyntheticaAddons V1.12 or above.

Modules

For being JPMS compatible the package structure in V3 was reorganized, which also means that V3 is no longer backward compatible. However, the class names are still unchanged so any good IDE is able to easily update all package imports of your application.

Features

Synthetica and SyntheticaAddons V3 come along with some great new features - more details will be published soon.

  • High-resolution support
  • Scalability support
  • New dark theme - style is similar to our Plain theme
  • JPMS (Java module system) support
  • Icon library with around 7.000 font based vector icons (part of SyntheticaAddons)

Release Date

The final releases are scheduled for October 2017 - beta releases are already available for licensees.

Upgrade Prices

Customers with a valid support subscription can expect 50% discount - customers without a support subscription receive a 20% discount on the regular list price. Feel free to contact sales and request a quote.

 

Product Links

SyntheticaFX for Java 9 - V0.9.0 released(13:00, 05. Sep. 2017)

We are pleased to announce the release of SyntheticaFX V0.9.0 for Java 9. The update covers Java 9 support in legacy mode. The Java module system (JPMS) is currently not supported but will be supported in an upcoming release.

SyntheticaFX requires access to some JavaFX internals - since Java 9 you have to pass the arguments below to the JVM for proper execution without any errors/warnings.

--add-exports=javafx.base/com.sun.javafx=ALL-UNNAMED 
--add-exports=javafx.base/com.sun.javafx.collections=ALL-UNNAMED 
--add-exports=javafx.graphics/com.sun.javafx.css=ALL-UNNAMED 
--add-exports=javafx.graphics/com.sun.javafx.cursor=ALL-UNNAMED 
--add-exports=javafx.base/com.sun.javafx.event=ALL-UNNAMED 
--add-exports=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED 
--add-exports=javafx.graphics/com.sun.javafx.tk=ALL-UNNAMED 
--add-exports=javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED 
--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED
--add-exports=javafx.controls/com.sun.javafx.scene.control.skin=ALL-UNNAMED 
--add-opens=javafx.controls/javafx.scene.control=ALL-UNNAMED
--add-opens=javafx.controls/javafx.scene.control.skin=ALL-UNNAMED

Alternatively, you can put the arguments into the manifest.mf file of your application by adding the attributes below. This is the recommended method for deployment of your application.

Add-Exports: javafx.base/com.sun.javafx javafx.base/com.sun.javafx.collections javafx.graphics/com.sun.javafx.css javafx.graphics/com.sun.javafx.cursor javafx.base/com.sun.javafx.event javafx.graphics/com.sun.javafx.scene javafx.graphics/com.sun.javafx.tk javafx.controls/com.sun.javafx.scene.control javafx.controls/com.sun.javafx.scene.control.behavior javafx.controls/com.sun.javafx.scene.control.skin   
Add-Opens: javafx.controls/javafx.scene.control javafx.controls/javafx.scene.control.skin
 

Related Links

Synthetica V2.20.3 and SyntheticaAddons V1.11.0 released!(11:31, 28. Feb. 2017)

We are pleased to announce the release of Synthetica V2.20.3 and SyntheticaAddons V1.11.0. Please find all major improvements below - a complete list of changes can be found at the Synthetica changelog and the SyntheticaAddons changelog.

New Synthetica Features

  • New layout style INLINEMENU_LEADING for title panels - see also Window Decoration, Part 7.
  • InlineMenuLeadingStyle
  • Improved font style support for buttons.

New SyntheticaAddons Features

  • DateComboBox, MonthView - foreground, background color support on mouse over.
  • DateComboBox hover support
  • JYTabbedPane - improved preview alogrythm for tab overview.
  • JYTabbedPane - improved focus handling.
  • JYTabbedPane - improved button factory customizability.
  • JYComboBox - improved customization of ColorPopupPanel by providing new method insertComponentAt(Component, int).
  • ColorPopupPanel
  • JYDocking - support for adding dockables to a floating dockable.
  • JYSearchField - improved button factory customizability.
  • Updated SwingX library.
Product Links
<< Previous PageNext Page >>