Hi Mark,

The default look and feel is Metal on all OS except for macOS where the default is Aqua.

You can modify the default look and feel using the the |swing.defaultlaf| property, and it works for me as expected. The default look and feel of an application is initialised to the class in the |swing.defaultlaf| property.

I ran a simple Java program on Windows:

java DefaultLookAndFeel.java
[*The Java(tm) Look and Feel* - javax.swing.plaf.metal.MetalLookAndFeel] com.sun.java.swing.plaf.windows.WindowsLookAndFeel javax.swing.plaf.metal.MetalLookAndFeel

java
-Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel DefaultLookAndFeel.java [*The Microsoft Windows Look and Feel* - com.sun.java.swing.plaf.windows.WindowsLookAndFeel] com.sun.java.swing.plaf.windows.WindowsLookAndFeel javax.swing.plaf.metal.MetalLookAndFeel


The |swing.defaultlaf| property is documented and is used in the tutorial How to Set the Look and Feel <https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html>, specifically the section Specifying the Look and Feel: Command Line <https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html#commandLine> has two examples how to modify the default look and feel.

If set the value to a class that doesn't exist, I'll get an exception:

java -Dswing.defaultlaf=NimbusLookAndFeel DefaultLookAndFeel.java
Exception in thread "main" java.lang.Error: Cannot load NimbusLookAndFeel at java.desktop/javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1390) at java.desktop/javax.swing.UIManager.initialize(UIManager.java:1501) at java.desktop/javax.swing.UIManager.maybeInitialize(UIManager.java:1467) at java.desktop/javax.swing.UIManager.getLookAndFeel(UIManager.java:492) at DefaultLookAndFeel.main(DefaultLookAndFeel.java:5)


You can use these line numbers to study how default look and feel is initialised.


Please note the client-libs-dev mailing list is not a support forum, it is place to discuss /development of client libraries/.

--
Regards,
Alexey

On 2025-06-19 19:04, Ludwig, Mark wrote:

Greetings,

We are in the process of (finally) completing a migration from AWT-based windows and dialogs to Swing-based that was started in the 1990s.

Testing the external Swing controls on Linux, we find nothing seems to happen as a result of setting the “swing.defaultlaf” System Property.  This is documented in multiple places – at least the javax.swing.UIManager doc, and the *How to Set the Look and Feel* tutorial (and is mentioned in https://bugs.openjdk.org/browse/JDK-8159164).

We find the “swing.systemlaf” System Property is effective in changing the returned value from UIManager.getSystemLookAndFeelClassName(), but does not by itself change the look-and-feel -- only with something like UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()), which is documented.

We would appreciate clarity on this discrepancy regarding the “default” look-and-feel for Swing on Linux.

Thanks,

Mark Ludwig


The source of the sample app:

|import javax.swing.UIManager; public class DefaultLookAndFeel { public static void main(String[] args) { System.out.println(UIManager.getLookAndFeel()); System.out.println(UIManager.getSystemLookAndFeelClassName()); System.out.println(UIManager.getCrossPlatformLookAndFeelClassName()); } }|

Reply via email to