派生自
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 的父类 )
● MetalUtils
定位于javax.swing.plaf.metal.MetalUtils 提供了大量 Metal 视感下的辅助方法(按钮初始化的 Gradient 样式就是通过它的 drawGradient 方法绘制的)。并提供了三个 inner class 进行视感处理。
GradientPainter
OceanDisabledButtonImageFilter
OceanToolBarImageFilter
★ MetalUtils 不是 public class, 因此无法从外部包访问其
● 关于 MetalButtonUI 的 update 方法及 JButton 的初始绘制
MetalButtonUI 负责绘制按钮的初始样式(调用 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 组件,然后调用 pain服务器托管网t() 。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
推荐系统在许多应用场景中都有广泛的应用,如电商、音乐、电影等。协同过滤(Collaborative Filtering)是推荐系统中的一种常用算法。在本文中,我们将介绍协同过滤算法的原理,并使用Python实现一个简单的推荐系统。 一、协同过滤算法简介 协同过…