1

我可以通过以下方式获取 LookAndFeel 列表

UIManager.LookAndFeelInfo[] lafInfo = UIManager.getInstalledLookAndFeels();

但是我怎样才能获得例如“金属” LookAndFeel 的主题列表?
我真的不想硬编码“DefaultMetal”、“Ocean”和“Test”。

4

2 回答 2

0

你在正确的道路上,你必须迭代 LaF 并选择你想要的。

l.getName()返回主题名称

示例代码:

public static void main(String[] args) {
    LookAndFeelInfo[] installedLookAndFeels = UIManager.getInstalledLookAndFeels();
    for(LookAndFeelInfo l : installedLookAndFeels){
        System.out.println(l.getName());
        if(l.getName().equals("Metal")){
            try {
                UIManager.setLookAndFeel(l.getClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
                e.printStackTrace();
            }
            break;
        }
    }
}

编辑:您可以尝试通过反射找到 MetalTheme 的所有子类,但我认为这是不好的选择。

于 2013-10-31T11:46:24.533 回答
0

我不认为这是可能的。如如何设置外观教程中所示,无法获得可用的主题列表。如果你看一下MetalLookAndFeel类,有几个静态方法,但没有像:

public static MetalTheme[] getAvailableThemes(){...}

我认为这将是一个非常有用的功能。无论如何,您最好的机会是对名称进行编码,因为确定一个类是否是 Metal 外观和感觉的主题唯一可以做的就是询问它是否是MetalTheme的一个实例,但这几乎没有给您任何东西来实现您的目标。

于 2013-10-31T12:27:31.500 回答