package org.jmeld.ui.util; import com.jgoodies.looks.plastic.Plastic3DLookAndFeel; import com.jgoodies.looks.plastic.PlasticLookAndFeel; import com.jidesoft.plaf.LookAndFeelFactory; import org.jmeld.JMeld; import org.jmeld.settings.JMeldSettings; import org.jmeld.util.ObjectUtil; import javax.swing.*; import java.awt.*; import java.util.ArrayList; import java.util.List; public class LookAndFeelManager { // Class variables: private static LookAndFeelManager instance; private LookAndFeelManager() { init(); } public static LookAndFeelManager getInstance() { if (instance == null) { instance = new LookAndFeelManager(); } return instance; } private void init() { try { PlasticLookAndFeel.setTabStyle(PlasticLookAndFeel.TAB_STYLE_METAL_VALUE); System.setProperty(PlasticLookAndFeel.DEFAULT_THEME_KEY, "MySkyBluer"); UIManager.installLookAndFeel("JGoodies Plastic 3D", "com.jgoodies.looks.plastic.Plastic3DLookAndFeel"); } catch (Exception e) { e.printStackTrace(); } } public void install() { String version; Plastic3DLookAndFeel plastic; String lookAndFeelName; String lookAndFeelClassName; Component root; try { lookAndFeelClassName = getDefaultLookAndFeelClassName(); // Try the preferred look and feel: lookAndFeelName = JMeldSettings.getInstance().getEditor().getLookAndFeelName(); for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if (ObjectUtil.equals(info.getName(), lookAndFeelName)) { lookAndFeelClassName = info.getClassName(); break; } } UIManager.setLookAndFeel(lookAndFeelClassName); LookAndFeelFactory.installJideExtension(); root = SwingUtilities.getRoot(JMeld.getJMeldPanel()); if (root != null) { SwingUtilities.updateComponentTreeUI(root); } } catch (Exception e) { } } public String getInstalledLookAndFeelName() { LookAndFeel lf; lf = UIManager.getLookAndFeel(); // WATCH OUT: // The lookandfeel can be registered in the UIManager with a different // name than the lookAndFeel.getName() (Is this a bug?) for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if (ObjectUtil.equals(info.getClassName(), lf.getClass().getName())) { return info.getName(); } } // This should never happen! return lf.getName(); } private String getDefaultLookAndFeelClassName() { if (System.getProperty("java.version").startsWith("1.7")) { return UIManager.getSystemLookAndFeelClassName(); } return Plastic3DLookAndFeel.class.getName(); } public List<String> getInstalledLookAndFeels() { List<String> result; result = new ArrayList<String>(); for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { result.add(info.getName()); } return result; } }