我可以通过
获取LookAndFeel列表UIManager.LookAndFeelInfo[] lafInfo = UIManager.getInstalledLookAndFeels();
但我怎样才能获得主题列表,例如: “金属”LookAndFeel?
我真的不想硬编码“DefaultMetal”,“Ocean”和“Test”。
答案 0 :(得分: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的所有子类,但我认为这是不好的选择。
答案 1 :(得分:0)
我认为这是不可能的。如How to Set Look and Feel教程所示,无法获得可用的主题列表。如果你看一下MetalLookAndFeel类,有几种静态方法,但没有:
public static MetalTheme[] getAvailableThemes(){...}
我认为这将是一个非常有用的功能。无论如何,你最好的机会就是扼杀这些名字,因为你唯一可以做的就是确定一个类是否是Metal外观的主题,就是问它是MetalTheme的一个实例但是几乎没有什么可以实现你的目标