关于UI delegate的问题
请教:
新创建的一个组件,在其构造函数中调用
updateUI来创建自己的UI delegate,函数如下
public void updateUI()
{
setUI(UIManager.getUI(this));
}
UIManager中getUI函数的实现如下
public static ComponentUI getUI(JComponent target)
{
...
Component ui=null;
...
if(ui==null)
ui=getDefaults().getUI(target);
}
显然,调用了UIDefaults的getUI函数,在UIDefaults中该函数实现如下:
public ComponenUI getUI(JComponent target)
{
ClassLoader uiClassLoader = target.getClass().getClassLoader();
Class uiClass=getUIClass(target.getUIClassID(),uiClassLoader);
Object uiObject = null;
if(uiClass==null)
{
getUIError("no componentUI class for:"+target);
}
else
{
try
{
Method m = (Method)get(uiClass);
if(m==null)
{
Class acClass=javax.swing.JComponent.class;
m=uiClass.getMethod("createUI",new Class[] {acClass});
put(uiClass,m);
}
uiObject=m.invoke(null,new Object[] {target});
}
catch(NoSuchMethodException e)
{
getUIError("static createUI() method not found in"+uiClass);
}
catch(Exception e1)
{
getUIError("createUI() failed for"+target+""+e1);
}
}
return (ComponentUI)uiObject;
}
问题:上面具体是怎么利用反射功能创建UI delegate的?另外,据我的了解,应当是根据当前的LookAndFeel创建不同的UI delegate,但是从这段代码中却看不出来。