圆角按钮--继承自JButton
2016-06-17 20:03
836 查看
该按钮继承子JButton,圆角,颜色渐变,有透明度,而且可以自己设置这些参数。
两种效果图:
![](http://img.blog.csdn.net/20160617200407102?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树