JFrame and Nimbus Look And Feel
Solution 1
Try using this:
JFrame.setDefaultLookAndFeelDecorated(true); //before creating JFrames
For more info., see How to Set the Look and Feel in the tutorial.
import javax.swing.*;
class FrameLook {
public static void showFrame(String plaf) {
try {
UIManager.setLookAndFeel(plaf);
} catch(Exception e) {
e.printStackTrace();
}
JFrame f = new JFrame(plaf);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setSize(400,100);
f.setLocationByPlatform(true);
f.setDefaultLookAndFeelDecorated(true);
f.setVisible(true);
}
public static void main(String[] args) {
showFrame(UIManager.getSystemLookAndFeelClassName());
showFrame(UIManager.getCrossPlatformLookAndFeelClassName());
showFrame("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
}
}
Solution 2
Confirming @Andrew's suspicion, setDefaultLookAndFeelDecorated()
says that, when supported, "newly created JFrame
s will have their Window
decorations provided by the current LookAndFeel
." I changed the size to see the whole title.
import javax.swing.*;
class FrameLook {
public static void showFrame(String plaf) {
try {
UIManager.setLookAndFeel(plaf);
} catch (Exception e) {
e.printStackTrace(System.out);
}
JFrame f = new JFrame(plaf);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setSize(500, 100);
f.setLocationByPlatform(true);
JFrame.setDefaultLookAndFeelDecorated(true);
f.setVisible(true);
}
public static void main(String[] args) {
showFrame(UIManager.getSystemLookAndFeelClassName());
showFrame(UIManager.getCrossPlatformLookAndFeelClassName());
showFrame("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
}
}
Solution 3
And confirming based on the Windows Classic UI for XP.
Solution 4
You can't do it directly since Nimbus doesn't support window decorations, that's why you always get a system window, even with the given answers. Try this very simple code:
import javax.swing.LookAndFeel;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
public class DoesNimbusSupportWindowDecorations {
@SuppressWarnings("unchecked")
public static void main(String... args) {
LookAndFeel nimbus = null;
for (LookAndFeelInfo lafInfo : UIManager.getInstalledLookAndFeels()) {
if (lafInfo.getName() == "Nimbus") {
try {
nimbus = ((Class<LookAndFeel>) Class.forName(
lafInfo.getClassName())).newInstance();
} catch (Exception e) {
System.err.println("Unexpected exception.");
}
}
}
if (nimbus != null) {
System.out.println("Nimbus supports window decorations...? "
+ (nimbus.getSupportsWindowDecorations() ? "YES" : "NO"));
} else {
System.err.println("Your system does not support Nimbus, you can't"
+ " run this test.");
}
}
}
or simply inside your code with the proper import:
System.out.println(new NimbusLookAndFeel().getSupportsWindowDecorations());
What's beyond my understanding is why Sun decided such a thing since the decorations do exist for internal frames and have a custom decoration. I'll be investigating if it's possible to use these decorations by extending NimbusLookAndFeel or playing with defaults, since Nimbus is based on Synth, unsure about the best way.
Related videos on Youtube
MOD
Updated on June 11, 2022Comments
-
MOD about 2 years
I use Nimbus Look and Feel in a project. However, although every GUI JComponent have a Look and Feel of Nimbus, JFrame always have Windows Look and Feel.
How can JFrame have Nimbus Look And Feel?
Edit: Operating System : Windows XP
-
Jonas over 12 years
-
-
Andrew Thompson over 12 years@Marek At first I put a comment claiming that the OP must be doing something wrong, but the source I edited into your answer suggests otherwise. Here, while the x-plat frame title-bar is different to the Windows title bar, the Nimbus title bar is identical. I suspect that means that Nimbus makes no special changes to the title-bar. Could users of other OS' confirm my result?
-
trashgod over 12 years@Andrew Thompson: This also appears to depend on the platform's current window manager.
-
Spencer Kormos over 12 yearsTake note that the background color for the pane in Nimbus is different and is the default color, as opposed to the background color of the pane for Windows.
-
Yago Méndez Vidal over 11 yearsThat's very wrong: Nimbus doesn't support window decorations, you will always get a system window.