我可以通过以下方式获取 LookAndFeel 列表
UIManager.LookAndFeelInfo[] lafInfo = UIManager.getInstalledLookAndFeels();
但是我怎样才能获得例如“金属” LookAndFeel 的主题列表?
我真的不想硬编码“DefaultMetal”、“Ocean”和“Test”。
我可以通过以下方式获取 LookAndFeel 列表
UIManager.LookAndFeelInfo[] lafInfo = UIManager.getInstalledLookAndFeels();
但是我怎样才能获得例如“金属” LookAndFeel 的主题列表?
我真的不想硬编码“DefaultMetal”、“Ocean”和“Test”。
你在正确的道路上,你必须迭代 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 的所有子类,但我认为这是不好的选择。
我不认为这是可能的。如如何设置外观教程中所示,无法获得可用的主题列表。如果你看一下MetalLookAndFeel类,有几个静态方法,但没有像:
public static MetalTheme[] getAvailableThemes(){...}
我认为这将是一个非常有用的功能。无论如何,您最好的机会是对名称进行编码,因为确定一个类是否是 Metal 外观和感觉的主题唯一可以做的就是询问它是否是MetalTheme的一个实例,但这几乎没有给您任何东西来实现您的目标。