首先我们自定义一个边框绘制矩形边框
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);