Company News

<< Previous PageNext Page >>

SyntheticaAddons V3 has been released!(15:52, 30. Nov. 2017)

We are pleased to finally announce the release of SyntheticaAddons V3.0.0.

New Features

SyntheticaAddons V3 provides some great new features:

  • High-resolution support
  • Scalability support
  • JPMS (Java module system) support
  • Icon library with around 7,000 font based scalable icons
  • Theme extension for Synthetica's new flat styled dark theme
  • Improved docking framework to support to minimize/maximize dockables within a floating window and dynamically add a dockable to a maximized/minimized dockable
  • Updated SwingX library
  • Java 9 support
 

IconFontBrowser

SyntheticaAddons provides a font based icon library with around 7,000 scalable icons. For your convenience we've created a simple browser application which helps you to find proper icons for your project. By selecting an icon the related source code appears in the bottom panel - so you can simply copy and paste the code into your project.

SyntheticaAddons IconFontBrowser

IconFontBrowser

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. All modules of SyntheticaAddons V3 are listed below.

SyntheticaAddons core                 ->  synthetica.addons.base
SyntheticaAddons jywidgets            ->  synthetica.addons.widgets
SyntheticaAddons jytable              ->  synthetica.addons.table
SyntheticaAddons jydocking            ->  synthetica.addons.docking
SyntheticaAddons jyiconfonts          ->  synthetica.addons.iconfonts
SyntheticaAddons swingx               ->  synthetica.addons.swingx
SyntheticaAddons netbeans             ->  synthetica.addons.netbeans
SyntheticaAddons Dark theme           ->  synthetica.addons.theme.dark
SyntheticaAddons Plain theme          ->  synthetica.addons.theme.plain
SyntheticaAddons BlueLight theme      ->  synthetica.addons.theme.bluelight
SyntheticaAddons AluOxide theme       ->  synthetica.addons.theme.aluoxide
SyntheticaAddons Classy theme         ->  synthetica.addons.theme.classy
SyntheticaAddons BlackEye theme       ->  synthetica.addons.theme.blackeye
SyntheticaAddons Simple2D theme       ->  synthetica.addons.theme.simple2d
SyntheticaAddons WhiteVision theme    ->  synthetica.addons.theme.whitevision
SyntheticaAddons SkyMetallic theme    ->  synthetica.addons.theme.skymetallic
SyntheticaAddons MauveMetallic theme  ->  synthetica.addons.theme.mauvemetallic
SyntheticaAddons OrangeMetallic theme ->  synthetica.addons.theme.orangemetallic
SyntheticaAddons BlueSteel theme      ->  synthetica.addons.theme.bluesteel
SyntheticaAddons BlackMoon theme      ->  synthetica.addons.theme.blackmoon
SyntheticaAddons BlueMoon theme       ->  synthetica.addons.theme.bluemoon
SyntheticaAddons SilverMoon theme     ->  synthetica.addons.theme.silvermoon
SyntheticaAddons BlueIceMoon theme    ->  synthetica.addons.theme.blueice
SyntheticaAddons GreenDream theme     ->  synthetica.addons.theme.greendream
SyntheticaAddons BlackStar theme      ->  synthetica.addons.theme.blackstar
SyntheticaAddons Standard theme       ->  synthetica.addons.theme.standard   

The library syntheticaAddonsWithThemes.jar which includes all theme extensions required for SyntheticaAddons is no longer provided. The library was created in V1 for your convenience to decrease the number of libraries required for your projects. However, because of the high number of available themes and in respect of JPMS it makes no sense to provide the library any longer.

For proper execution without any errors/warnings make sure to pass the arguments below to the JVM. Note: Don't forget to add the arguments required for the synthetica.base module too - see Synthetica's 'README.TXT'.

--add-exports=java.desktop/com.sun.java.swing.plaf.windows=synthetica.addons.base
--add-opens=java.desktop/javax.swing.plaf.synth=synthetica.addons.base
--add-exports=java.desktop/com.sun.java.swing.plaf.windows=synthetica.addons.table
--add-exports=java.desktop/sun.swing=synthetica.addons.swingx   
 

Legacy Mode (Classpath 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/com.sun.java.swing.plaf.windows=ALL-UNNAMED

Alternatively, you can put the arguments into the manifest.mf file of your application by adding the attributes below - however, this will work only if your application is executed as jar file in legacy mode (classpath mode). Means as usual with specifying a class path instead of a module path. Note: Be aware that Web Start does not respect these entries - in this case you have to use the JVM arguments from above and add it to the j2se entry of your jnlp file.

Add-Exports: java.desktop/sun.swing java.desktop/sun.swing.table java.desktop/sun.swing.plaf.synth java.desktop/sun.awt.shell java.desktop/com.sun.awt java.base/sun.security.action java.desktop/com.sun.java.swing.plaf.windows    
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
 

JPMS Integration

Generally you only have to add the modules of the required themes to your application. However, by not using the static clause all specified theme modules are mandatory to run your application. Which means at compile and run time.

With using the static clause all specified theme modules are optional at run time. However, in this case you have to tell the JVM which of the theme modules should be added to the module graph e.g. by using --add-modules.

Example:

module synthetica.demo
{
   requires synthetica.addons.base;
   requires synthetica.addons.swingx;
   requires synthetica.addons.widgets;
   requires synthetica.addons.docking;
   requires synthetica.addons.table;

   requires static synthetica.theme.aluoxide;
   requires static synthetica.theme.blackeye;
   requires static synthetica.theme.blackmoon;
   requires static synthetica.theme.blackstar;
   requires static synthetica.theme.blueice;
   requires static synthetica.theme.bluelight;
   requires static synthetica.theme.bluemoon;
   requires static synthetica.theme.bluesteel;
   requires static synthetica.theme.classy;
   requires static synthetica.theme.dark;
   requires static synthetica.theme.greendream;
   requires static synthetica.theme.mauvemetallic;
   requires static synthetica.theme.orangemetallic; 
   requires static synthetica.theme.plain;
   requires static synthetica.theme.silvermoon;
   requires static synthetica.theme.simple2d;
   requires static synthetica.theme.skymetallic;
   requires static synthetica.theme.standard;
   requires static synthetica.theme.whitevision;
  
   requires static synthetica.addons.theme.aluoxide;
   requires static synthetica.addons.theme.blackeye;
   requires static synthetica.addons.theme.blackmoon;
   requires static synthetica.addons.theme.blackstar;
   requires static synthetica.addons.theme.blueice;
   requires static synthetica.addons.theme.bluelight;
   requires static synthetica.addons.theme.bluemoon;
   requires static synthetica.addons.theme.bluesteel;
   requires static synthetica.addons.theme.classy;
   requires static synthetica.addons.theme.dark;
   requires static synthetica.addons.theme.greendream;
   requires static synthetica.addons.theme.mauvemetallic;
   requires static synthetica.addons.theme.orangemetallic;
   requires static synthetica.addons.theme.plain;
   requires static synthetica.addons.theme.silvermoon;
   requires static synthetica.addons.theme.simple2d;
   requires static synthetica.addons.theme.skymetallic;
   requires static synthetica.addons.theme.standard;
   requires static synthetica.addons.theme.whitevision;
}   

Only the themes you want to use at run time will be added to the modules graph with --add-modules. In the example below it's the SyntheticaPlain theme.

java --add-exports=... --module-path synthetica.jar;syntheticaPlain.jar;syntheticaPlainAddon.jar;syntheticaDemo.jar --add-modules synthetica.theme.plain --add-modules synthetica.addons.theme.plain -m synthetica.demo/de.javasoft.synthetica.demo.Demo        
 

System Requirements

SyntheticaAddons V3 requires Java 9 or above - however, in case you have to support Java 6/7/8 and Java 9 you should consider to use SyntheticaAddons V1 in classpath mode only.

 

Product Links

Synthetica V3 has been released!(15:43, 30. Nov. 2017)

After a pretty long phase of development we are pleased to finally announce the release of Synthetica V3.0.0.

New Features

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

Synthetica Dark Theme Screenshot

SyntheticaSimpleDemo
 

TunesMockup application with SyntheticaDark theme enabled

Synthetica TunesMockup

SyntheticaTunesDark

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. All modules of Synthetica V3 are listed below.

Synthetica core                 ->  synthetica.base
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. Note: When using SyntheticaAddons some additional arguments are required - for more details take a look at SyntheticaAddons 'README.TXT'.

--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 - however, this will work only if your application is executed as jar file in legacy mode (classpath mode). Means as usual with specifying a class path instead of a module path. Note: Be aware that Web Start does not respect these entries - in this case you have to use the JVM arguments from above and add it to the j2se entry of your jnlp file.

Add-Exports: java.desktop/sun.swing java.desktop/sun.swing.table java.desktop/sun.swing.plaf.synth 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
 

JPMS Integration

Generally you only have to add the modules of the required themes to your application. However, by not using the static clause all specified theme modules are mandatory to run your application. Which means at compile and run time.

With using the static clause all specified theme modules are optional at run time. However, in this case you have to tell the JVM which of the theme modules should be added to the module graph e.g. by using --add-modules.

Example:

module synthetica.demo
{
   requires synthetica.base;

   requires static synthetica.theme.aluoxide;
   requires static synthetica.theme.blackeye;
   requires static synthetica.theme.blackmoon;
   requires static synthetica.theme.blackstar;
   requires static synthetica.theme.blueice;
   requires static synthetica.theme.bluelight;
   requires static synthetica.theme.bluemoon;
   requires static synthetica.theme.bluesteel;
   requires static synthetica.theme.classy;
   requires static synthetica.theme.dark;
   requires static synthetica.theme.greendream;
   requires static synthetica.theme.mauvemetallic;
   requires static synthetica.theme.orangemetallic; 
   requires static synthetica.theme.plain;
   requires static synthetica.theme.silvermoon;
   requires static synthetica.theme.simple2d;
   requires static synthetica.theme.skymetallic;
   requires static synthetica.theme.standard;
   requires static synthetica.theme.whitevision;
}   

Only the themes you want to use at run time will be added to the modules graph with --add-modules. In the example below it's the SyntheticaDark theme.

java --add-exports=... --module-path synthetica.jar;syntheticaDark.jar;syntheticaDemo.jar --add-modules synthetica.theme.dark -m synthetica.demo/de.javasoft.synthetica.demo.Demo        
 

System Requirements

Synthetica V3 requires Java 9 or above - however, in case you have to support Java 6/7/8 and Java 9 you should consider to use Synthetica V2 in classpath mode only.

 

Product Links

Announcing Synthetica V3 RC2 and SyntheticaAddons V3 RC1(13:46, 24. Nov. 2017)

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

Release Dates

The final releases are scheduled for the end of November 2017.

Modules

For more detailed information on how to use/install take a look at the README.txt of the downloaded package. Both products will still support the legacy mode (classpath mode) too.

 

Product Links

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
<< Previous PageNext Page >>