您的位置:首页 > 产品设计 > UI/UE

圆角按钮--继承自JButton

2016-06-17 20:03 836 查看
该按钮继承子JButton,圆角,颜色渐变,有透明度,而且可以自己设置这些参数。

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.RoundRectangle2D;

import javax.swing.ImageIcon;
import javax.swing.JButton;

public class MyButton extends JButton {
//判断类的serialVersionUID来验证版本一致性的
private static final long serialVersionUID = 39082560987930759L;

//默认颜色 两种渐变色
private Color BUTTON_COLOR1 = new Color(205, 255, 205);
private 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);  */
//按下按钮时字体的默认颜色
private Color BUTTON_FOREGROUND_COLOR1 = new Color(51, 154, 47);
private Color BUTTON_FOREGROUND_COLOR2 = Color.WHITE;
//默认字体
private Font font = new Font("system", Font.PLAIN, 12);
//判断是否按下
private boolean hover;
private float clickTran = 0.6F, exitTran = 1F;
//修改按下后透明度
public void setClickTran(float tran) {
clickTran = tran;
}
//修改按下前透明度
public void setExitTran(float tran) {
exitTran = tran;
}
//上半段渐变颜色
public void setBUTTON_COLOR1(Color bUTTON_COLOR1) {
BUTTON_COLOR1 = bUTTON_COLOR1;
}
//下半段渐变颜色
public void setBUTTON_COLOR2(Color bUTTON_COLOR2) {
BUTTON_COLOR2 = bUTTON_COLOR2;
}
//按下前字体颜色
public void setBUTTON_FOREGROUND_COLOR1(Color bUTTON_FOREGROUND_COLOR1) {
BUTTON_FOREGROUND_COLOR1 = bUTTON_FOREGROUND_COLOR1;
}
//按下后字体颜色
public void setBUTTON_FOREGROUND_COLOR2(Color bUTTON_FOREGROUND_COLOR2) {
BUTTON_FOREGROUND_COLOR2 = bUTTON_FOREGROUND_COLOR2;
}

public MyButton(ImageIcon icon) {
setIcon(icon);
Init();
}
public MyButton(String name) {
setText(name);
Init();
}

public void Init() {
setFont(font);
setBorderPainted(false);
setForeground(BUTTON_FOREGROUND_COLOR1);
setFocusPainted(false);
setContentAreaFilled(false);

addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {  //鼠标移动到上面时
setForeground(BUTTON_FOREGROUND_COLOR2);
hover = true;
repaint();
}

@Override
public void mouseExited(MouseEvent e) {  //鼠标移开时
setForeground(BUTTON_FOREGROUND_COLOR1);
hover = false;
repaint();
}
});
}

@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g.create();
int h = getHeight();
int w = getWidth();
float tran = clickTran;
if (!hover) {
//	            tran = 0.3F;
//	        	tran = 0.6F;
tran = exitTran;
}

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);

GradientPaint p1;
GradientPaint p2;

if (getModel().isPressed()) {
p1 = new GradientPaint(0, 0, new Color(0, 0, 0), 0, h - 1,
new Color(100, 100, 100));
p2 = new GradientPaint(0, 1, new Color(0, 0, 0, 50), 0, h - 3,
new Color(255, 255, 255, 100));
} else {
p1 = new GradientPaint(0, 0, new Color(100, 100, 100), 0, h - 1,
new Color(0, 0, 0));
p2 = new GradientPaint(0, 1, new Color(255, 255, 255, 100), 0,
h - 3, new Color(0, 0, 0, 50));
}
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
tran));
RoundRectangle2D.Float r2d = new RoundRectangle2D.Float(0, 0, w - 1,
h - 1, 20, 20);
Shape clip = g2d.getClip();
g2d.clip(r2d);

GradientPaint gp = new GradientPaint(0.0F, 0.0F, BUTTON_COLOR1, 0.0F,
h, BUTTON_COLOR2, true);

g2d.setPaint(gp);
g2d.fillRect(0, 0, w, h);
g2d.setClip(clip);
g2d.setPaint(p1);
g2d.drawRoundRect(0, 0, w - 1, h - 1, 20, 20);
g2d.setPaint(p2);
g2d.drawRoundRect(1, 1, w - 3, h - 3, 18, 18);
g2d.dispose();
super.paintComponent(g);
}

}
测试代码:

import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
//import javax.swing.Icon;
import javax.swing.JFrame;

public class TestMyButton extends JFrame {

private MyButton myButton;

public TestMyButton(String name) {
myButton = new MyButton(name);
setSize(400, 400);
setLayout(null);
myButton.setBounds(50, 50, 100, 70);
add(myButton);

//修改测试代码段
myButton.setBUTTON_COLOR1(new Color(125, 161, 237));
myButton.setBUTTON_COLOR2(new Color(91, 118, 173));
myButton.setBUTTON_FOREGROUND_COLOR1(Color.BLACK);
myButton.setBUTTON_FOREGROUND_COLOR2(Color.GREEN);
myButton.setFont(new Font("楷体", Font.PLAIN, 25));
myButton.setClickTran(0.8F);
myButton.setExitTran(0.3F);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyEvent();
setVisible(true);
}

public TestMyButton(ImageIcon icon) {
myButton = new MyButton(icon);
setSize(400, 400);
setLayout(null);
myButton.setBounds(50, 50, 100, 70);
add(myButton);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyEvent();
setVisible(true);
}

public void MyEvent() {
myButton.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("@@@");
}
});
}

public static void main(String[] args) {
// TODO Auto-generated method stub
new TestMyButton("哈哈");
/*ImageIcon icon = new ImageIcon("img/stop.png");
icon = new ImageIcon(icon.getImage().getScaledInstance(30, 30, Image.SCALE_SMOOTH));
new TestMyButton(icon);*/
}

}


两种效果图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 继承 GUI