Class LookAndFeelManager

java.lang.Object
generic.theme.laf.LookAndFeelManager
Direct Known Subclasses:
FlatLookAndFeelManager, GtkLookAndFeelManager, MacLookAndFeelManager, MetalLookAndFeelManager, MotifLookAndFeelManager, NimbusLookAndFeelManager, WindowsClassicLookAndFeelManager, WindowsLookAndFeelManager

public abstract class LookAndFeelManager extends Object
Manages installing and updating a LookAndFeel
  • Field Details

  • Constructor Details

  • Method Details

    • getLookAndFeelType

      public LafType getLookAndFeelType()
      Returns the LafType managed by this manager.
      Returns:
      the LafType
    • installLookAndFeel

      Installs the LookAndFeel
      Throws:
      ClassNotFoundException - if the LookAndFeel class could not be found
      InstantiationException - if a new instance of the class couldn't be created
      IllegalAccessException - if the class or initializer isn't accessible
      UnsupportedLookAndFeelException - if lnf.isSupportedLookAndFeel() is false
    • resetAll

      public void resetAll(GThemeValueMap javaDefaults)
      Called when all colors, fonts, and icons may have changed
      Parameters:
      javaDefaults - the current set of java defaults so that those ids can be updated special as needed by the current LookAndFeel
    • updateAllRegisteredComponentFonts

      protected void updateAllRegisteredComponentFonts()
    • colorsChanged

      public void colorsChanged()
      Called when one or more colors have changed.
    • iconsChanged

      public void iconsChanged(Set<String> changedIconIds, Icon newIcon)
      Called when one or more icons have changed.
      Parameters:
      changedIconIds - set of icon ids affected by this icon change
      newIcon - the new icon to use for the given set of icon ids
    • fontsChanged

      public void fontsChanged(Set<String> changedFontIds)
      Called when one or more fonts have changed.

      This will update the Java UIManager and trigger a reload of the UIs.

      Parameters:
      changedFontIds - the set of Java Font ids that are affected by this change; these are the normalized ids
    • updateComponentUis

      protected void updateComponentUis()
    • repaintAll

      protected void repaintAll()
    • registerFont

      public void registerFont(Component component, String fontId)
      Binds the component to the font identified by the given font id. Whenever the font for the font id changes, the component will be updated with the new font.
      Parameters:
      component - the component to set/update the font
      fontId - the id of the font to register with the given component
    • registerFont

      public void registerFont(Component component, String fontId, int fontStyle)
      Binds the component to the font identified by the given font id. Whenever the font for the font id changes, the component will be updated with the new font.

      This method is fairly niche and should not be called by most clients. Instead, call registerFont(Component, String).

      Parameters:
      component - the component to set/update the font
      fontId - the id of the font to register with the given component
      fontStyle - the font style
    • unRegisterFont

      public void unRegisterFont(JComponent component, String fontId)
      Removes the given component and id binding from this class.
      Parameters:
      component - the component to remove
      fontId - the id used when originally registered
      See Also:
    • doInstallLookAndFeel

      Subclasses may override this method to install a specific look and feel.
      Throws:
      ClassNotFoundException - if the LookAndFeel class could not be found
      InstantiationException - if a new instance of the class couldn't be created
      IllegalAccessException - if the class or initializer isn't accessible
      UnsupportedLookAndFeelException - if lnf.isSupportedLookAndFeel() is false
    • fixupLookAndFeelIssues

      protected void fixupLookAndFeelIssues()
      Subclass may override this method to do specific LookAndFeel fixes.

      This will get called after default values are loaded. This means that any values installed by this method will overwrite any values registered by the theme.

      Standard properties, such as strings and booleans, can be set inside of the theme properties files. For more complicated UIManager properties, look and feel classes will need to override this method and install those directly.

      Any property installed here will not fully be part of the theme system, but rather will be directly installed into the Java Look and Feel. Thus, properties installed here will be hard-coded overrides for the system. If we decided that a hard-coded value should be put into the theme system, then we will need to add support for that property type so that it can be used when loading the theme files.

    • processJavaDefaults

      protected void processJavaDefaults()
      Extracts java default colors, fonts, and icons and stores them in the ThemeManager and updates the UIDefaults by installing GColors for all color values and installing any overridden fonts or icons.
    • createUiDefaultsMapper

      protected abstract UiDefaultsMapper createUiDefaultsMapper(UIDefaults defaults)
    • findLookAndFeelClassName

      protected String findLookAndFeelClassName(String lookAndFeelName)
    • isSupported

      protected boolean isSupported(String lookAndFeelName)
    • setKeyBinding

      protected void setKeyBinding(String existingKsText, String newKsText, String[] prefixValues)
    • installCursorBlinkingProperties

      public void installCursorBlinkingProperties()
    • getLookAndFeelIdsForType

      public static List<String> getLookAndFeelIdsForType(UIDefaults defaults, Class<?> clazz)
      Searches the given UIDefaults for ids whose value matches the given class
      Parameters:
      defaults - the UIDefaults to search
      clazz - the value class to look for (i.e., Color, Font, or Icon)
      Returns:
      the list of ids whose value is of the given class type.