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

如何在Java/Swing应用程序中使用Windows XP主题?,java,swing,look-and-feel,Java,Swing,Look And Feel,我必须在Java/Swing项目中使用Windows XP主题。 有如下的课程 com.sun.java.swing.plaf.windows.WindowsLookAndFeel 当有人想要使用与用户当前应用的主题相同的主题时,可以使用WindowsLookAndFeel com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel WindowsClassicLookAndFeel可以在有人想要专门使用windows classic主

我必须在Java/Swing项目中使用Windows XP主题。 有如下的课程

com.sun.java.swing.plaf.windows.WindowsLookAndFeel
当有人想要使用与用户当前应用的主题相同的主题时,可以使用
WindowsLookAndFeel

com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel
WindowsClassicLookAndFeel
可以在有人想要专门使用windows classic主题时使用

当我们将Windows的主题从XP更改为经典时,swing UI也将从XP更改为经典。我们如何使用前面提到的类来强制它

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

这将使您获得本地的外观和感觉

我通常使用这一行

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;
    }
}
或者简单地说:

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经典主题,即使用户尚未将其Windows主题设置为经典

因此,您可以强制使用经典,但不能强制使用Windows经典主题的Vista/7 LookAndFeel


或者,您可以将应用程序设计为类似Vista/7 LookAndFeel的任何东西(只是开玩笑)

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

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";

WindowsLookAndFeel
的全部目的是将Swing UI完全呈现为本机Windows UI。因此,你的应用程序自动适应用户选择的任何东西是非常合理的。我真的不明白问题出在哪里。不强制,让用户拥有他们想要的任何PLAF!顺便说一句,*nix&OSX上的用户得到了什么?使用第二个经典的。您将始终拥有经典风格,独立于用户选择的主题。我的问题不是如何获得系统的外观和感觉。我的应用程序只在windows上运行,同时,我不想让它看起来像windows经典主题,如果用户更改其主题,这是可能的。正在寻找任何解决方法…不是在*nix或OSX上,它不会。它更像是一个
ClassNotFoundException
(幸运的是)。非常糟糕的建议-1.
  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";