我在一个项目中使用了Nimbus外观。然而,尽管每个GUI JComponent都有Nimbus的外观,但JFrame总是具有Windows的外观。
如何使JFrame具有Nimbus的外观?
编辑:操作系统:Windows XP
我在一个项目中使用了Nimbus外观。然而,尽管每个GUI JComponent都有Nimbus的外观,但JFrame总是具有Windows的外观。
如何使JFrame具有Nimbus的外观?
编辑:操作系统:Windows XP
JFrame.setDefaultLookAndFeelDecorated(true); //before creating JFrames
如需更多信息,请参见教程中的如何设置外观和感觉。
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");
}
}
setDefaultLookAndFeelDecorated()
表示,当支持时,“新创建的 JFrame
将使用当前 LookAndFeel
提供的 Window
装饰”。我改变了大小以查看整个标题。
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");
}
}
基于Windows XP经典界面进行确认。
由于Nimbus不支持窗口装饰,因此您无法直接执行此操作,这就是为什么即使使用给定的答案,您始终会得到一个系统窗口。 尝试使用以下非常简单的代码:
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.");
}
}
}
或者只需在您的代码中使用适当的导入:
System.out.println(new NimbusLookAndFeel().getSupportsWindowDecorations());
这是我的做法。从我的Eclipse项目中复制粘贴。
import javax.swing.UIManager.LookAndFeelInfo;
import java.awt.EventQueue;
import java.awt.BorderLayout;
import javax.swing.*;
public class Frame1 {
private JFrame frame;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
Frame1 window = new Frame1();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}