如何在Java/Swing应用程序中使用Windows XP主题?

4

我需要在我的Java/Swing项目中使用Windows XP主题。有以下类。

com.sun.java.swing.plaf.windows.WindowsLookAndFeel

WindowsLookAndFeel 可以用于想要使用用户当前应用的相同主题的人。

com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel

WindowsClassicLookAndFeel可以用于想要专门使用Windows经典主题的人。

当我们将Windows的主题从XP更改为经典时,Swing UI也会从XP更改为经典。如何使用上述类强制其使用经典主题?


WindowsLookAndFeel 的整个目的是将 Swing UI 呈现为本机 Windows UI。因此,您的应用程序自动适应用户选择是非常合理的。 - user330315
1
我不是很理解问题所在。无需强制,让用户使用他们想要的PLAF!顺便问一下,在*nix和OS X上的用户得到了什么? - Andrew Thompson
使用第二种经典样式。您将始终拥有经典风格,独立于用户选择的主题。 - WesternGun
3个回答

4

我通常使用这行代码

javax.swing.UIManager.setLookAndFeel( javax.swing.UIManager.getSystemLookAndFeelClassName());

因为如果你在另一个系统中运行应用程序,可能无法使用Windows外观和感觉。

或者你可以使用这个:

for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
    if ("<lookAndFeelName>".equals(info.getName())) {
        javax.swing.UIManager.setLookAndFeel(info.getClassName());
        break;
    }
}

因为这样,如果你想强制使用Windows的外观和感觉,你需要验证这个lookAndFeel是否存在。

或者你有两种好的方法可以设置lookAndFeel而不必检查是否存在:

try {
    javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    //javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
} catch (ClassNotFoundException ex) {
    //Handle Exception
} catch (InstantiationException ex) {
    //Handle Exception
} catch (IllegalAccessException ex) {
    //Handle Exception
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
    //Handle Exception
}

或者简单来说:

try {
    javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    //javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
} catch (Exception ex) {
    //Handle Exception
}

WindowsLookAndFeel和WindowsClassicLookAndFeel之间的区别在于,"WindowsLookAndFeel"将对应于用户Windows主题,而"WindowsClassicLookAndFeel"将强制Java应用程序GUI与Windows Classic Theme匹配,即使用户未将其Windows主题设置为经典模式。

因此,您可以强制使用经典模式,但无法强制使用Vista/7 LookAndFeel使用Windows经典主题。

或者,您可以设计您的应用程序成任何类似于Vista/7 LookAndFeel的外观(开玩笑)。


我的问题不在于获取系统的外观和感觉。我的应用程序只能在Windows上运行,同时,我不希望它具有Windows经典主题的外观,如果用户更改了他的主题,这是可能的。正在寻找任何解决方法... - Sudhir

2

一种方法是在构造函数中实现:

public class LookS extends JFrame { 

  String win1 = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
  String win2 = "com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel";

public LookS(){
...

        try {
            UIManager.setLookAndFeel(win1);
            SwingUtilities.updateComponentTreeUI(this);
        } catch (Exception e) {
            e.printStackTrace();
        }
        this.setDefaultLookAndFeelDecorated(true);
...
}

另外,您还可以考虑这些课程:
  String srt1 = "javax.swing.plaf.metal.MetalLookAndFeel";
  String srt2 = "javax.swing.plaf.nimbus.NimbusLookAndFeel";
  String srt3 = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
  String srt4 = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";

0
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

这将让你获得本地的外观和感觉


3
在*nix或OS X上不会这样。这将使你更像是一个“ClassNotFoundException”(幸运的是)。建议非常差。-1 - Andrew Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接