自定义外观的Button

本文介绍如何通过继承 MetalButtonUI 和 MetalBorders.ButtonBorder 来定制 JButton 的外观与边框,探讨 JButton 的 MVC 设计模式,并解析 MetalUtils 在按钮初始化中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

派生自
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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值