⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uidefaults.java

📁 gcc的组建
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* UIDefaults.java -- database for all settings and interface bindings.   Copyright (C) 2002, 2004, 2005  Free Software Foundation, Inc.This file is part of GNU Classpath.GNU Classpath is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GNU Classpath is distributed in the hope that it will be useful, butWITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNUGeneral Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU Classpath; see the file COPYING.  If not, write to theFree Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA02110-1301 USA.Linking this library statically or dynamically with other modules ismaking a combined work based on this library.  Thus, the terms andconditions of the GNU General Public License cover the wholecombination.As a special exception, the copyright holders of this library give youpermission to link this library with independent modules to produce anexecutable, regardless of the license terms of these independentmodules, and to copy and distribute the resulting executable underterms of your choice, provided that you also meet, for each linkedindependent module, the terms and conditions of the license of thatmodule.  An independent module is a module which is not derived fromor based on this library.  If you modify this library, you may extendthis exception to your version of the library, but you are notobligated to do so.  If you do not wish to do so, delete thisexception statement from your version. */package javax.swing;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.Insets;import java.beans.PropertyChangeListener;import java.beans.PropertyChangeSupport;import java.lang.reflect.Method;import java.util.Hashtable;import java.util.LinkedList;import java.util.ListIterator;import java.util.Locale;import java.util.MissingResourceException;import java.util.ResourceBundle;import javax.swing.border.Border;import javax.swing.plaf.ComponentUI;/** * UIDefaults is a database where all settings and interface bindings are * stored into. A PLAF implementation fills one of these (see for example * plaf/basic/BasicLookAndFeel.java) with "ButtonUI" -&gt; new BasicButtonUI(). * * @author Ronald Veldema (rveldema@cs.vu.nl) */public class UIDefaults extends Hashtable{  /** Our ResourceBundles. */  private LinkedList bundles;  /** The default locale. */  private Locale defaultLocale;  /** We use this for firing PropertyChangeEvents. */  private PropertyChangeSupport propertyChangeSupport;  /**   * Used for lazy instantiation of UIDefaults values so that they are not   * all loaded when a Swing application starts up, but only the values that   * are really needed. An <code>ActiveValue</code> is newly instantiated   * every time when the value is requested, as opposed to the normal   * {@link LazyValue} that is only instantiated once.   */  public static interface ActiveValue  {    Object createValue(UIDefaults table);  }  public static class LazyInputMap implements LazyValue  {    Object[] bind;    public LazyInputMap(Object[] bindings)    {      bind = bindings;    }    public Object createValue(UIDefaults table)    {      InputMap im = new InputMap ();      for (int i = 0; 2*i+1 < bind.length; ++i)        {          im.put (KeyStroke.getKeyStroke ((String) bind[2*i]),                  bind[2*i+1]);        }      return im;    }  }  /**   * Used for lazy instantiation of UIDefaults values so that they are not   * all loaded when a Swing application starts up, but only the values that   * are really needed. A <code>LazyValue</code> is only instantiated once,   * as opposed to the {@link ActiveValue} that is newly created every time   * it is requested.   */  public static interface LazyValue  {    Object createValue(UIDefaults table);  }  public static class ProxyLazyValue implements LazyValue  {    LazyValue inner;    public ProxyLazyValue(String s)    {      final String className = s;      inner = new LazyValue ()        {           public Object createValue (UIDefaults table)           {            try              {                return Class                  .forName(className)                  .getConstructor(new Class[] {})                  .newInstance(new Object[] {});              }            catch (Exception e)              {                return null;              }          }        };    }    public ProxyLazyValue(String c, String m)    {      final String className = c;      final String methodName = m;      inner = new LazyValue ()        {           public Object createValue (UIDefaults table)           {            try               {                                return Class                  .forName (className)                  .getMethod (methodName, new Class[] {})                  .invoke (null, new Object[] {});              }            catch (Exception e)              {                return null;              }          }        };    }        public ProxyLazyValue(String c, Object[] os)    {      final String className = c;      final Object[] objs = os;      final Class[] clss = new Class[objs.length];      for (int i = 0; i < objs.length; ++i)        {          clss[i] = objs[i].getClass();        }            inner = new LazyValue()        {           public Object createValue(UIDefaults table)           {                        try              {                return Class                  .forName(className)                  .getConstructor(clss)                  .newInstance(objs);	      }            catch (Exception e)	      {                return null;              }          }        };    }    public ProxyLazyValue(String c, String m, Object[] os)    {      final String className = c;      final String methodName = m;      final Object[] objs = os;      final Class[] clss = new Class[objs.length];      for (int i = 0; i < objs.length; ++i)	{          clss[i] = objs[i].getClass();	}      inner = new LazyValue()        { 	  public Object createValue(UIDefaults table)	  {            try               {                return Class                  .forName(className)                  .getMethod(methodName, clss)                  .invoke(null, objs);              }            catch (Exception e)              {                return null;              }          }        };    }        public Object createValue(UIDefaults table)    {      return inner.createValue(table);    }  }  /** Our serialVersionUID for serialization. */  private static final long serialVersionUID = 7341222528856548117L;  /**   * Constructs a new empty UIDefaults instance.   */  public UIDefaults()  {    bundles = new LinkedList();    defaultLocale = Locale.getDefault();    propertyChangeSupport = new PropertyChangeSupport(this);  }  /**   * Constructs a new UIDefaults instance and loads the specified entries.   * The entries are expected to come in pairs, that means   * <code>entries[0]</code> is a key, <code>entries[1]</code> is a value,   * <code>entries[2]</code> a key and so forth.   *   * @param entries the entries to initialize the UIDefaults instance with   */  public UIDefaults(Object[] entries)  {    this();        for (int i = 0; (2 * i + 1) < entries.length; ++i)      put(entries[2 * i], entries[2 * i + 1]);  }  /**   * Returns the entry for the specified <code>key</code> in the default   * locale.   *   * @return the entry for the specified <code>key</code>   */  public Object get(Object key)  {    return this.get(key, getDefaultLocale());  }  /**   * Returns the entry for the specified <code>key</code> in the Locale   * <code>loc</code>.   *   * @param key the key for which we return the value   * @param loc the locale   */  public Object get(Object key, Locale loc)  {    Object obj = null;    if (super.containsKey(key))      {        obj = super.get(key);      }    else if (key instanceof String)      {        String keyString = (String) key;        ListIterator i = bundles.listIterator(0);        while (i.hasNext())	  {            String bundle_name = (String) i.next();            ResourceBundle res =              ResourceBundle.getBundle(bundle_name, loc);            if (res != null)              {                try                   {                                        obj = res.getObject(keyString);                    break;                  }                catch (MissingResourceException me)                  {                    // continue, this bundle has no such key                  }              }          }      }    // now we've found the object, resolve it.    // nb: LazyValues aren't supported in resource bundles, so it's correct    // to insert their results in the locale-less hashtable.    if (obj == null)      return null;    if (obj instanceof LazyValue)      {        Object resolved = ((LazyValue) obj).createValue(this);        super.remove(key);        super.put(key, resolved);        return resolved;      }    else if (obj instanceof ActiveValue)      {        return ((ActiveValue) obj).createValue(this);      }        return obj;  }  /**   * Puts a key and value into this UIDefaults object.<br>   * In contrast to   * {@link java.util.Hashtable}s <code>null</code>-values are accepted   * here and treated like #remove(key).   * <br>   * This fires a PropertyChangeEvent with key as name and the old and new   * values.   *   * @param key the key to put into the map   * @param value the value to put into the map   *   * @return the old value for key or <code>null</code> if <code>key</code>   *     had no value assigned   */  public Object put(Object key, Object value)  {    Object old = checkAndPut(key, value);    if (key instanceof String && old != value)      firePropertyChange((String) key, old, value);    return old;  }  /**   * Puts a set of key-value pairs into the map.   * The entries are expected to come in pairs, that means   * <code>entries[0]</code> is a key, <code>entries[1]</code> is a value,   * <code>entries[2]</code> a key and so forth.   * <br>   * If a value is <code>null</code> it is treated like #remove(key).   * <br>   * This unconditionally fires a PropertyChangeEvent with   * <code>&apos;UIDefaults&apos;</code> as name and <code>null</code> for   * old and new value.   *   * @param entries the entries to be put into the map   */  public void putDefaults(Object[] entries)  {    for (int i = 0; (2 * i + 1) < entries.length; ++i)  {        checkAndPut(entries[2 * i], entries[2 * i + 1]);      }    firePropertyChange("UIDefaults", null, null);  }  /**   * Checks the value for <code>null</code> and put it into the Hashtable, if   * it is not <code>null</code>. If the value is <code>null</code> then   * remove the corresponding key.   *   * @param key the key to put into this UIDefauls table   * @param value the value to put into this UIDefaults table   *   * @return the old value for <code>key</code>   */  private Object checkAndPut(Object key, Object value)  {    Object old;    if (value != null)      old = super.put(key, value);    else      old = super.remove(key);    return old;  }  /**   * Returns a font entry for the default locale.   *   * @param key the key to the requested entry   *   * @return the font entry for <code>key</code> or null if no such entry   *     exists   */  public Font getFont(Object key)  {    Object o = get(key);    return o instanceof Font ? (Font) o : null;  }  /**   * Returns a font entry for a specic locale.   *   * @param key the key to the requested entry   * @param locale the locale to the requested entry   *   * @return the font entry for <code>key</code> or null if no such entry   *     exists

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -