首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

作图JButton圆角效果

2012-10-30 
绘制JButton圆角效果在网上看见一篇非常好的技术文章,此文章是将JButton的四角绘制成圆角形状。这个在我们

绘制JButton圆角效果
在网上看见一篇非常好的技术文章,此文章是将JButton的四角绘制成圆角形状。这个在我们平时应用也非常多。就我而言,如果我来设计一个按钮JButton的圆角效果,我会采用:

(1)先让JButton的变成透明色
(2)然后,加入一个具有圆角的图片

现在我还是希望利用程序来绘制JButton的圆角效果,所以我将在网上看见的代码给大家一起分享。代码如下:

第一:重新继承JButton组件,然后利用Java 2D绘制图形的类将JButton组件重写。

package com.gxa.edu.test;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.JButton;public class RButton 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;    public RButton(String name) {        this.setText(name);        setFont(new Font("system", Font.PLAIN, 12));        setBorderPainted(false);        setForeground(BUTTON_COLOR2);        setFocusPainted(false);        setContentAreaFilled(false);        addMouseListener(new MouseAdapter() {            @Override            public void mouseEntered(MouseEvent e) {                setForeground(BUTTON_FOREGROUND_COLOR);                hover = true;                repaint();            }            @Override            public void mouseExited(MouseEvent e) {                setForeground(BUTTON_COLOR2);                hover = false;                repaint();            }        });    }    @Override    protected void paintComponent(Graphics g) {        Graphics2D g2d = (Graphics2D) g.create();        int h = getHeight();        int w = getWidth();        float tran = 1F;        if (!hover) {            tran = 0.3F;        }        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);    }}


第二:设计一个简单的JFrame窗口,加入此JButton,然后看看最终的效果
package com.gxa.edu.test;import java.awt.FlowLayout;import javax.swing.JFrame;public class TestButtonFrame extends JFrame {DepthButton b1;RButton b2;public TestButtonFrame() {super("测试");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setSize(300, 200);this.getContentPane().setLayout(new FlowLayout());b1 = new DepthButton("depthButton");b2 = new RButton("RButton");this.getContentPane().add(b1);this.getContentPane().add(b2);this.setVisible(true);}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubnew TestButtonFrame();}}




    

热点排行