锁定老帖子 主题:自定义外观的Button
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-17
派生自 BasicButtonUI 的类可以改变按钮的外观,定位于 javax.swing.plaf.metal 的 MetalButtonUI 类,控制 metal 视感下 Button 的外观 JButton b = new JButton(); b.setUI(new MyUI); 2 .派生自 javax.swing.plaf.basic.BasicBorders.ButtonBorder 的类可以改变按钮的边框绘制, metal 视感下 JButton 边框由 javax.swing.plaf.metal.MetalBorders.ButtonBorder 绘制 b.setBorder(); ★ 必须先 setUI 再 setBorder
● JButton 的结构 MVC 模式设计 Model : ButtonModel View : BasicButtonUI ( 根据不同的视感,再有不同的子类,如 MetalButtonUI) 以及 javax.swing.plaf.metal.MetalBorders.ButtonBorder ,控制边框的绘制 MetalButtonUI 的 update 方法控制了按钮初始时的绘制( MetalUtils.drawGradient(c, g, "Button.gradient", 0, 0, c.getWidth(), c.getHeight(), true) ),因此,即使重写 paint() 方法,初始按钮仍然会被绘制。 Controller : JButton ( 一般使用 AbstractButton ,各种 Button 的父类 )
● about MetalUtils , Metal utility tools. 定位于javax.swing.plaf.metal.MetalUtils 提供了大量 Metal 视感下的辅助方法(按钮初始化的 Gradient 样式就是通过它的 drawGradient 方法绘制的)。并提供了三个 inner class 进行视感处理。 GradientPainter OceanDisabledButtonImageFilter OceanToolBarImageFilter ★ MetalUtils 不是 public class, 因此无法从外部包访问其
● 关于 MetalButtonUI 的 update 方法及 JButton 的初始绘制 MetalButtonUI .update() 负责绘制按钮的初始样式(调用 MetalUtils.drawGradient() 方法绘制)。然后调用 paint() 方法绘制其他效果( pressed, focus, text )。最后调用 super.update() 。 Super.update() 传递给 BasicButtonUI ,由于 BasicButtonUI 没有 overload update 方法,因此传递给 javax.swing.plaf.ButtonUI 。 ButtonUI 是一个 abstract class , 因此 update 方法继续传递给 javax.swing.plaf.ComponentUI 。 ComponentUI 的 update 方法只是简单的 fillRect 组件,然后调用 paint() 。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-10-17
发错了吧,这是SWING的内容啊,
|
|
返回顶楼 | |
发表时间:2008-10-19
没有发错。CDC也有这样的东西
|
|
返回顶楼 | |
发表时间:2008-10-19
现在CDC的手机几乎没有吧,大部份都是CLDC哦
|
|
返回顶楼 | |
发表时间:2008-10-20
java.lang.Object 写道 现在CDC的手机几乎没有吧,大部份都是CLDC哦 Sun 出了一个CDC Toolkit 1.0,有兴趣可以了解下, 不过我还是喜欢Anroid |
|
返回顶楼 | |
发表时间:2009-05-23
cdc里面哪里有swing,只有awt啊
|
|
返回顶楼 | |
发表时间:2009-06-19
S60 支持 eswt ,都没看到 什么人用过。
se 有一款 真机支持cdc。忘记了型号了。 其实 这些 mvc 啊什么的。我之前听说过,不了解。后来自己写代码,反复修改修改,觉得结构比较好了。再后来,看mvc的书,发现,这东西的结构怎么跟我写的差不多。。。。 说这个主要是想说,常常把以前的老代码拿来回炉,也是提高的一种方法。 |
|
返回顶楼 | |
浏览 4846 次