java中自定义边框-创新互联

自定义边框,可以继承AbstractBorder,需要实现三个方法

专注于为中小企业提供成都网站制作、成都网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业信州免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了超过千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
public boolean isBorderOpaque() 此默认实现返回false。
public Insets getBorderInsets​(Component c)此默认实现返回一个新Insetspublic void paintBorder​(Component c, Graphics g, int x, int y, int width, int height) 绘制边框

绘制边框最主要是不要在组件区域内绘制边框,在给定的范围内绘制。如下图:

在JComponent中画边框调用的代码,传入的是组件的宽和高,起点是0,0,所以说边框的厚度在组件的宽高范围内。

protected void paintBorder(Graphics g) {
        Border border = getBorder();
        if (border != null) {
            border.paintBorder(this, g, 0, 0, getWidth(), getHeight());
        }
    }

自定义了一个边框,上下一个颜色,左右黑色的。代码如下:

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;

import javax.swing.border.AbstractBorder;

public class MyBorder extends AbstractBorder
{

	private int thickless;
	private Color color;
	
	public void paintBorder(Component c, Graphics g, int x, int y, int width, int height)
	{
		Insets insets = getBorderInsets(c);
		Color c1 = g.getColor();
		g.setColor(color);
		g.fillRect(x, y, width, insets.top);
		g.fillRect(x, y + height-insets.bottom, width, insets.bottom);
		g.setColor(Color.BLACK);
		g.fillRect(x, y + insets.top, x+insets.left, y + height-insets.top);
		g.fillRect(x+width-insets.right, y+insets.top, insets.right, height-insets.top-insets.bottom);
		g.setColor(c1);
	}

	public MyBorder(int thickless, Color color)
	{
		super();
		this.thickless = thickless;
		this.color = color;
	}

	@Override
	public Insets getBorderInsets(Component c)
	{
		
		return new Insets(thickless,thickless,thickless,thickless);
	}

	@Override
	public boolean isBorderOpaque()
	{
		
		return true;
	}

}

测试代码如下:

JPanel jpa = new JPanel(new GridLayout(1,2));
		jpa.setPreferredSize(new  Dimension(400,80));
		MyBorder eb = new MyBorder(5,Color.red);
		MyBorder eb1 = new MyBorder(10,Color.BLUE);
		JButton jb = new JButton("red");
		jb.setBorder(eb);
		jpa.add(jb);
		JButton jb1 = new JButton("blue");
		jb1.setBorder(eb1);
		jb1.setSize(150,80);
		jpa.add(jb1);
		add(jpa);

效果如下:

由于水平有限,如果有错误,请大家多多指导,提高水平,共同学习。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文名称:java中自定义边框-创新互联
分享URL:http://pwwzsj.com/article/dihogs.html