从当前的LookAndFeel

时间:2015-09-11 17:28:30

标签: swing user-interface java-7 jtree uimanager

我有一个应用程序,我正在创建DefaultTreeCellRenderer。为此,我想显示FileDirectory的默认系统图标。

在应用程序的开始我设置系统外观

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

结果是默认值来自系统。但FILEFOLDER指向默认的LookAndFeel

enter image description here

如何从系统Look And Feel获取值?拥有所有相同的图标。

1 个答案:

答案 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,而不是所有可能的远程文件系统。