001 /*
002 * $Id: UIManagerUtils.java,v 1.4 2005/10/26 11:44:30 kleopatra Exp $
003 *
004 * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005 * Santa Clara, California 95054, U.S.A. All rights reserved.
006 *
007 * This library is free software; you can redistribute it and/or
008 * modify it under the terms of the GNU Lesser General Public
009 * License as published by the Free Software Foundation; either
010 * version 2.1 of the License, or (at your option) any later version.
011 *
012 * This library is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015 * Lesser General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this library; if not, write to the Free Software
019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
020 */
021 package org.jdesktop.swingx.util;
022
023 import java.awt.Font;
024 import java.lang.reflect.Method;
025 import java.util.logging.Level;
026 import java.util.logging.Logger;
027
028 import javax.swing.JComponent;
029 import javax.swing.JEditorPane;
030 import javax.swing.UIManager;
031 import javax.swing.plaf.metal.MetalLookAndFeel;
032 import javax.swing.text.View;
033 import javax.swing.text.html.HTMLDocument;
034
035 /**
036 * Utility for working with the UIManager
037 * @author Richard Bair
038 */
039 // PENDING: JW - is this still used? Yes, by BasicTipOfTheDayUI
040 public final class UIManagerUtils {
041
042 private static final Logger LOG = Logger.getLogger(UIManagerUtils.class
043 .getName());
044 /**
045 * Hidden constructor
046 */
047 private UIManagerUtils() {
048 }
049
050 /**
051 * Initializes the object in the UIDefaults denoted by 'key' to defaultObj <strong>only if</strong>
052 * the key is not already in the UIDefaults.
053 * @param key
054 * @param defaultObj
055 */
056 public static void initDefault(String key, Object defaultObj) {
057 Object obj = UIManager.get(key);
058 if (obj == null) {
059 UIManager.put(key, defaultObj);
060 }
061 }
062
063 /**
064 * Initializes the object in the UIDefaults denoted by 'key' to either the property in the metal look and feel
065 * associated with defaultMetalObjName, or the defaultObj if all else fails.
066 * @param key
067 * @param defaultMetalObjName
068 * @param defaultObj
069 */
070 public static void initDefault(String key, String defaultMetalObjName, Object defaultObj) {
071 Object obj = UIManager.get(key);
072 if (obj == null) {
073 try {
074 Method m = ((MetalLookAndFeel)UIManager.getLookAndFeel()).getClass().getMethod(defaultMetalObjName, defaultObj.getClass());
075 UIManager.put(key, m.invoke(UIManager.getLookAndFeel(), defaultMetalObjName));
076 } catch (Exception e) {
077 UIManager.put(key, defaultObj);
078 }
079 }
080 }
081
082 /**
083 * Forces the given component to use the given font for its html rendering.
084 * Text must have been set before calling this method.
085 *
086 * @param component
087 * @param font
088 */
089 public static void htmlize(JComponent component, Font font) {
090 String stylesheet = "body { margin-top: 0; margin-bottom: 0; margin-left: 0; margin-right: 0; font-family: "
091 + font.getName()
092 + "; font-size: "
093 + font.getSize()
094 + "pt; }"
095 + "a, p, li { margin-top: 0; margin-bottom: 0; margin-left: 0; margin-right: 0; font-family: "
096 + font.getName()
097 + "; font-size: "
098 + font.getSize()
099 + "pt; }";
100
101 try {
102 HTMLDocument doc = null;
103 if (component instanceof JEditorPane) {
104 if (((JEditorPane)component).getDocument() instanceof HTMLDocument) {
105 doc = (HTMLDocument)((JEditorPane)component).getDocument();
106 }
107 } else {
108 View v = (View)component
109 .getClientProperty(javax.swing.plaf.basic.BasicHTML.propertyKey);
110 if (v != null && v.getDocument() instanceof HTMLDocument) {
111 doc = (HTMLDocument)v.getDocument();
112 }
113 }
114 if (doc != null) {
115 doc.getStyleSheet().loadRules(new java.io.StringReader(stylesheet),
116 null);
117 } // end of if (doc != null)
118 } catch (Exception e) {
119 // TODO change to something meaningful JW - when do we expect this to happen?
120 LOG.log(Level.WARNING, "", e);
121
122 }
123 }
124 }