用java如何编写边框_如何使用Java Swing编写肮脏的渐变绘制边框

本文介绍了一种在矩形边框上实现颜色渐变效果的技术。通过使用GradientPaint为不同方向的边框创建渐变,并利用三角形填充角落区域以达到平滑过渡的效果。适用于希望增强UI视觉效果的开发者。

修订:问题是绘制一个四边形边框,每边开始时有一个坚实的基色,并在边框的跨度上逐渐变白.挑战在于使边界的交叉看起来无缝.要实现这一点,可以绘制边框,然后使用三角形来“混合”角落.如果在绘制粗体的矩形中没有重叠,则每个角可以使用两个三角形,或者如果两个平行的边界边延伸边界的整个长度(即矩形重叠),则每个角的一个三角形就足够了(如下所示).

private static final int GRADIENT_LENGTH = 29;

private static final int BAR_LENGTH = 25;

public static void paintGradientBorder(Graphics g, Color borderColor) {

Graphics2D g2 = (Graphics2D) g.create();

GradientPaint gradientColorWest = new GradientPaint(0, 0, borderColor,

GRADIENT_LENGTH, 0, Color.WHITE);

GradientPaint gradientColorEast = new GradientPaint(WINDOW_WIDTH - GRADIENT_LENGTH,

0, Color.WHITE, WINDOW_WIDTH, 0, borderColor);

GradientPaint gradientColorNorth= new GradientPaint(0, 0, borderColor, 0,

GRADIENT_LENGTH, Color.WHITE);

GradientPaint gradientColorSouth = new GradientPaint(0, WINDOW_HEIGHT - GRADIENT_LENGTH,

Color.WHITE,0, WINDOW_HEIGHT, borderColor);

//south bar

g2.setPaint(gradientColorSouth);

g2.fillRect(0, WINDOW_HEIGHT - BAR_LENGTH, WINDOW_WIDTH, BAR_LENGTH);

//north bar

g2.setPaint(gradientColorNorth);

g2.fillRect(0, 0, WINDOW_WIDTH, BAR_LENGTH);

//west bar

g2.setPaint(gradientColorWest);

g2.fillRect(0, BAR_LENGTH, BAR_LENGTH, WINDOW_HEIGHT - BAR_LENGTH * 2);

//east bar

g2.setPaint(gradientColorEast);

g2.fillRect(WINDOW_WIDTH - BAR_LENGTH, BAR_LENGTH, WINDOW_WIDTH, WINDOW_HEIGHT - BAR_LENGTH * 2);

//NORTH WEST CORNER

//left triangle

Polygon p = new Polygon();

p.addPoint(0, 0);

p.addPoint(BAR_LENGTH, BAR_LENGTH);

p.addPoint(0, BAR_LENGTH);

g2.setPaint(gradientColorWest);

g2.fillPolygon(p);

//NORTH EAST CORNER

//right triangle

p.reset();

p.addPoint(WINDOW_WIDTH, 0);

p.addPoint(WINDOW_WIDTH - BAR_LENGTH, BAR_LENGTH);

p.addPoint(WINDOW_WIDTH, BAR_LENGTH);

g2.setPaint(gradientColorEast);

g2.fillPolygon(p);

//SOUTH WEST CORNER

//left triangle

p.reset();

p.addPoint(0, WINDOW_HEIGHT);

p.addPoint(0,WINDOW_HEIGHT - BAR_LENGTH);

p.addPoint(BAR_LENGTH, WINDOW_HEIGHT - BAR_LENGTH);

g2.setPaint(gradientColorWest);

g2.fillPolygon(p);

//SOUTH EAST CORNER

//right triangle

p.reset();

p.addPoint(WINDOW_WIDTH, WINDOW_HEIGHT);

p.addPoint(WINDOW_WIDTH, WINDOW_HEIGHT - BAR_LENGTH);

p.addPoint(WINDOW_WIDTH - BAR_LENGTH, WINDOW_HEIGHT - BAR_LENGTH);

g2.setPaint(gradientColorEast);

g2.fillPolygon(p);

g2.dispose();

}Graphics2D g2 = (Graphics2D) g.create();

GradientPaint gradientColorWest = new GradientPaint(0, 0, borderColor,

GRADIENT_LENGTH, 0, Color.WHITE);

GradientPaint gradientColorEast = new GradientPaint(WINDOW_WIDTH - GRADIENT_LENGTH,

0, Color.WHITE, WINDOW_WIDTH, 0, borderColor);

GradientPaint gradientColorNorth= new GradientPaint(0, 0, borderColor, 0,

GRADIENT_LENGTH, Color.WHITE);

GradientPaint gradientColorSouth = new GradientPaint(0, WINDOW_HEIGHT - GRADIENT_LENGTH,

Color.WHITE,0, WINDOW_HEIGHT, borderColor);

//south bar

g2.setPaint(gradientColorSouth);

g2.fillRect(0, WINDOW_HEIGHT - BAR_LENGTH, WINDOW_WIDTH, BAR_LENGTH);

//north bar

g2.setPaint(gradientColorNorth);

g2.fillRect(0, 0, WINDOW_WIDTH, BAR_LENGTH);

//west bar

g2.setPaint(gradientColorWest);

g2.fillRect(0, BAR_LENGTH, BAR_LENGTH, WINDOW_HEIGHT - BAR_LENGTH * 2);

//east bar

g2.setPaint(gradientColorEast);

g2.fillRect(WINDOW_WIDTH - BAR_LENGTH, BAR_LENGTH, WINDOW_WIDTH, WINDOW_HEIGHT - BAR_LENGTH * 2);

//NORTH WEST CORNER

//left triangle

Polygon p = new Polygon();

p.addPoint(0, 0);

p.addPoint(BAR_LENGTH, BAR_LENGTH);

p.addPoint(0, BAR_LENGTH);

g2.setPaint(gradientColorWest);

g2.fillPolygon(p);

//NORTH EAST CORNER

//right triangle

p.reset();

p.addPoint(WINDOW_WIDTH, 0);

p.addPoint(WINDOW_WIDTH - BAR_LENGTH, BAR_LENGTH);

p.addPoint(WINDOW_WIDTH, BAR_LENGTH);

g2.setPaint(gradientColorEast);

g2.fillPolygon(p);

//SOUTH WEST CORNER

//left triangle

p.reset();

p.addPoint(0, WINDOW_HEIGHT);

p.addPoint(0,WINDOW_HEIGHT - BAR_LENGTH);

p.addPoint(BAR_LENGTH, WINDOW_HEIGHT - BAR_LENGTH);

g2.setPaint(gradientColorWest);

g2.fillPolygon(p);

//SOUTH EAST CORNER

//right triangle

p.reset();

p.addPoint(WINDOW_WIDTH, WINDOW_HEIGHT);

p.addPoint(WINDOW_WIDTH, WINDOW_HEIGHT - BAR_LENGTH);

p.addPoint(WINDOW_WIDTH - BAR_LENGTH, WINDOW_HEIGHT - BAR_LENGTH);

g2.setPaint(gradientColorEast);

g2.fillPolygon(p);

g2.dispose();

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值