关于UI delegate的问题

lilly317 2002-06-06 06:40:43
请教:
新创建的一个组件,在其构造函数中调用
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,但是从这段代码中却看不出来。
...全文
57 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
fightboy 2002-06-06
  • 打赏
  • 举报
回复
target.getUIClassID()
反射的精髓所在

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧