绘制背景为图片的圆形按钮

首先我们自定义一个边框绘制矩形边框


import java.awt.Color;  
import java.awt.Component;  
import java.awt.Graphics;  
import java.awt.Insets;  
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.border.Border;  
  
/** 
 * Swing 
 * 设置圆角边框(可以自定义边框的颜色) 
 * 可以为button,文本框等人以组件添加边框 
 * 使用方法: 
 * JButton close = new JButton(" 关 闭 "); 
 * close.setOpaque(false);// 设置原来按钮背景透明 
 * close.setBorder(new RoundBorder());黑色的圆角边框 
 * close.setBorder(new RoundBorder(Color.RED)); 红色的圆角边框 
 *  
 * @author Monsoons 
 */  
public class RoundBorder implements Border {  
    private Color color;  
  
    public RoundBorder(Color color) {// 有参数的构造方法  
        this.color = color;  
    }  
  
    public RoundBorder() {// 无参构造方法  
        this.color = Color.BLACK;  
        // 如果实例化时,没有传值  
        // 默认是黑色边框  
    }  
  
    public Insets getBorderInsets(Component c) {  
        return new Insets(0, 0, 0, 0);  
    }  
  
    public boolean isBorderOpaque() {  
        return false;  
    }  
  
    // 实现Border(父类)方法  
    @Override  
    public void paintBorder(Component c, Graphics g, int x, int y, int width,  
            int height) {  
        g.setColor(color);  
        g.drawRoundRect(0, 0, c.getWidth(), c.getHeight(), 25, 50); 
       
        //g.fillRoundRect(0, 0, c.getWidth() - 10, c.getHeight() - 1, 15, 15);
    }  
    
 
}  

接着我们再自定义一个button重写paintComponent方法绘制圆角矩形内容

import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Paint;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.RoundRectangle2D;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class MyJButton extends JButton {
	 private static final long serialVersionUID = 39082560987930759L;  
	    public static final Color BUTTON_COLOR1 = new Color(205, 255, 205);  
	    public static final Color BUTTON_COLOR2 = new Color(51, 154, 47);  
	    // public static final Color BUTTON_COLOR1 = new Color(125, 161, 237);  
	    // public static final Color BUTTON_COLOR2 = new Color(91, 118, 173);  
	    public static final Color BUTTON_FOREGROUND_COLOR = Color.WHITE;  
	    private boolean hover;  
	    private Image image;
	  
	   
	    public MyJButton(ImageIcon imageIcon) {
			// TODO Auto-generated constructor stub
	    	
	    	super(imageIcon);
	    	this.image = imageIcon.getImage();
	    }
	    


	@Override
	protected void paintComponent(Graphics g) {


		g.drawImage(image, 0, 0, image.getWidth(this), image.getHeight(this),
				this);
		g.drawRoundRect(0, 0, 104, 27, 30, 30);
		// g.dispose();
	}  


	
}

最后我们写一个main方法测试

JFrame frm = new JFrame();
		ImageIcon imageIcon = new ImageIcon(MyJButton.class.getClassLoader().getResource("").getPath()+"qqKeFu.png");
		MyJButton but = new MyJButton(imageIcon);
		
		frm.setLayout(null);
		frm.setBounds(800, 400, 200, 200);
		but.setBounds(30, 30, 104, 27);
		but.setBorderPainted(true);
		but.setCursor(new Cursor(Cursor.HAND_CURSOR));
		//but.setBorder(new RoundBorder(Color.RED));
		frm.add(but);
		frm.setDefaultCloseOperation(3);
		frm.setVisible(true);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值