我有一个应用程序,我正在创建DefaultTreeCellRenderer
。为此,我想显示File
和Directory
的默认系统图标。
在应用程序的开始我设置系统外观
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
// Set System L&F
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
new App().setVisible(true);
}
});
所有用户界面都具有系统外观。但是,当我使用自定义JTree
创建DefaultTreeCellRenderer
时,我会返回DefaultTreeCellRenderer#getIcon
以下static
字段。
private static final Icon FILE = UIManager.getIcon("FileView.fileIcon");
private static final Icon FOLDER = UIManager.getIcon("FileView.directoryIcon");
结果是默认值来自系统。但FILE
和FOLDER
指向默认的LookAndFeel
。
如何从系统Look And Feel
获取值?拥有所有相同的图标。
答案 0 :(得分:1)
但FILE和FOLDER指向默认的LookAndFeel。
尝试为要处理的系统设置LAF。类似的东西:
UIManager.setLookAndFeel( laf1 );
Icon laf1Icon = UIManager.getIcon("FileView.fileIcon");
Icon laf1Folder = UIManager.getIcon("FileView.directoryIcon");
UIManager.setLookAndFeel( laf2 );
Icon laf2Icon = UIManager.getIcon("FileView.fileIcon");
Icon laf2Folder = UIManager.getIcon("FileView.directoryIcon");
//...
UIManager.setLookAndFeel( backToTheDefault );
您可以通过查看UIManager Defaults来查看此方法的结果。随着LAF的变化,图标会发生变化。当然,这只适用于系统上可用的LAF,而不是所有可能的远程文件系统。