JButton 式样自定义
public class MyButton extends JButton {
private float alpha = 1f; // 底色的透明度,默认为不透明
private int isMouseEntered = 1;// 鼠标是否进入按钮
public MyButton() {
initStyle();
}
public MyButton(String buttonText) {
super(buttonText);
initStyle();
//添加鼠标监听
addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
//当鼠标进入时,鼠标进入状态改为TRUE,并重绘按钮
isMouseEntered = 0;
repaint();
super.mouseEntered(e);
}
@Override
public void mouseExited(MouseEvent e) {
isMouseEntered = 1;
repaint();
}
@Override
public void mousePressed(MouseEvent arg0) {
isMouseEntered = 2;
repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
isMouseEntered = 0;
repaint();
}
});
}
/**
* 初始化按钮样式
*/
private void initStyle() {
//初始化透明按钮
setOpaque(false);
setBorder(null);
// setBorderPainted(false);
setFocusable(false);
setBackground(null);
// setFocusPainted(false);
setContentAreaFilled(false);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
// 绘制渐变底色
switch(isMouseEntered) {
case 0:
AlphaComposite composite = (
AlphaComposite.SRC_OVER, alpha);
(composite);
drawButtonBackground(g2, this, ("#E0F1FC"), ("#DEEBFE"),
("#D6E5F5"), ("#FFFFFF"));
break;
case 1:
break;
case 2:
AlphaComposite composite1 = (
AlphaComposite.SRC_OVER, alpha);
(composite1);
// drawButtonBackground(g2, this, ("#D6E5F5"), ("#FFFFFF"),
// ("#FFFFFF"), ("#D6E5F5"));
drawButtonPressBackground(g2, this, ("#D6E5F5"), ("#EFF5FE"),
("#EFF5FE"), ("#D6E5F5"));
default:
break;
}
super.paintComponent(g);
}
private static void drawButtonBackground(Graphics2D g2, JToggleButton bt,
Color c1, Color c2, Color c3, Color c4) {
// 使平滑
(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// 造一个圆角区域
r2d = new (0, 0,
() - 1, () - 1, 10, 10);
Shape clip = ();
(r2d);
(clip);
(("#afafaf"));
(0, 0, () - 2, () - 1, 10, 10);
// 渐变背景
(new GradientPaint(2, 2, c1, 1, () / 3, c2));
(2, 2, () - 5, () / 3, 10, 10);
// 渐变二段
(new GradientPaint(1, () / 3, c3, 1, bt
.getHeight(), c4));
(2, () / 3, () - 5,
() / 3 * 2 - 1, 10, 10);
// ();
}
private static void drawButtonPressBackground(Graphics2D g2, JToggleButton bt,
Color c1, Color c2, Color c3, Color c4) {
// 使平滑
(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// 造一个圆角区域
r2d = new (0, 0,
() - 1, () - 1, 10, 10);
Shape clip = ();
(r2d);
(clip);
// 外边框
(0, 0, () - 2, () - 1, 10, 10);
// 渐变背景
(new GradientPaint(1, ()/7, c1, 1, () / 3, c2));
(2, 2, () - 5, () / 3);
// 渐变二段
(new GradientPaint(1, () / 3, c3, 1, bt
.getHeight(), c4));
(2, () / 3, () - 5,
() / 3 * 2 - 1);
// 内边框
(("#afafaf"));
(1, 1, () - 3, () - 2, 9, 9);
(2, 2, () - 4, () - 3, 8, 8);
(("#cfcfcf"));
(2, 3, () - 4, () - 4, 8, 7);
}
}