创建一个圆形的按钮

来源:互联网 发布:淘宝的组装电脑靠谱吗 编辑:程序博客网 时间:2024/05/06 14:20
<script type="text/javascript">google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//</script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>创建一个圆形的按钮作者:jackliue-mail:suntoday@eyou.com这个主题是关于一个圆形的Swing按钮,实际上,这个技巧可以适用于制作任何形状的按钮,我们将实现一个圆形轮廓的按钮。当去创建一个圆形按钮时有两件事情去做,第一是为了画出一个圆形轮廓而重新实现原来的轮廓实现方法,第二是建立一些动作以便在你当你点击在里面的圆形按钮时有应答反应。这是一个样例程序,它扩展了JButton
import java.awt.*;import java.awt.geom.*;import javax.swing.*;import java.awt.event.*;public class RoundButton extends JButton {    public RoundButton(String label) {        super(label);                //下面的语句讲述这个按钮变为一个圆形而不是椭圆形        Dimension size = getPreferredSize();        size.width = size.height = Math.max(size.width, size.height);        setPreferredSize(size);        //不让JButton画背景而允许我们去画一个圆背景        setContentAreaFilled(false);    }    // 画出圆的背景和标签    protected void paintComponent(Graphics g) {        if (getModel().isArmed()) {            g.setColor(Color.lightGray);        } else {            g.setColor(getBackground());        }        g.fillOval(0, 0, getSize().width-1, getSize().height-1);        // 在焦点上画出一个标签        super.paintComponent(g);    }    // 画出一个边框    protected void paintBorder(Graphics g) {        g.setColor(getForeground());        g.drawOval(0, 0, getSize().width-1, getSize().height-1);    }    // 侦察单击区域    Shape shape;    public boolean contains(int x, int y) {        // 如果按钮改变了尺寸将重新创建一个Shape        if (shape == null || !shape.getBounds().equals(getBounds())) {            shape = new Ellipse2D.Float(0, 0, getWidth(), getHeight());        }        return shape.contains(x, y);    }    // 测试    public static void main(String[] args) {        JButton button1 = new RoundButton("http://www.77750.com");        JButton button2 = new RoundButton("欢迎你常来做客");        button1.setBackground(Color.green);        button2.setBackground(Color.yellow);        // 创建一个Fram来显示这个按钮        JFrame frame = new JFrame();        frame.getContentPane().add(button1);        frame.getContentPane().add(button2);        frame.getContentPane().setLayout(new FlowLayout());        frame.setSize(450, 350);        frame.setVisible(true);        //测试单击事件        button1.addActionListener(new ActionListener(){                        public void actionPerformed(ActionEvent e){                                System.out.println("you click button1!");                        }                });        button2.addActionListener(new ActionListener(){                        public void actionPerformed(ActionEvent e){                                System.out.println("you click button2!");                        }                });    }}
这个RoundButton类扩展了JButton类,因为我们想要保持大多数JButton的特性。在这个RoundButton构造函数中,方法setContentAreaFilled()被调用,它给按钮产生一个长方形焦点,但是没有画出背景。现在我们需要画出圆的背景。它覆盖了paintComponent()方法,这个方法使用了一个Graphics对象的fillOval()方法画出一个填充的圆形。然后调用超类的paintComponent()方法,paintComponent()在填充圆里画出一个标签。为了画出一个圆形按钮的周围边框,这个例子也覆盖了paintBorder()方法,如果你不需要一个边框,可以不覆盖这个方法。这个方法调用一个Graphics对象的fillOval()方法来画出一个圆的细边框。最后,我们需要在当用户单击它时有一个响应,但当超出边界时则没有响应。按缺省情况,一个JButton对于一个长方形按钮区域的反应良好,但JButton对于按钮没有的真正意义上的形状观念,因此它仅仅假定了按钮是一个长方形的。告诉JButton一个真实的形状需要你去覆盖contains()方法。contains()方法获得一个坐标值,并且如果坐标值包含在按钮里面便返回true,否则就返回false。运行结果图如下:打包下载原代码
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 肩一边高一边低怎么办 35岁无稳定工作怎么办 机械手表走的快怎么办 机械表发条紧了怎么办 两只乌龟互相咬怎么办? 乌龟鼻子摔烂了怎么办 剃刀龟脖子肿了怎么办 遇见有戾气的人怎么办 身上的寒气太重怎么办 身体里寒气太重怎么办 做人事招不到人怎么办 苹果6cpu坏了怎么办 苹果6s升级不了怎么办 冬天打游戏手冷怎么办 漂流瓶不能用了怎么办 感冒鼻子闻不到味道怎么办 胃难受想吐头晕怎么办 心口窝堵得慌怎么办 嘴巴里苦的很怎么办 怀孕了嘴巴好苦怎么办 嘴巴没味道想吐怎么办 手机流量不够用怎么办移动 sd卡图片不显示怎么办 苹果忘了id账号怎么办 苹果id号忘记了怎么办 7icloud存储满了怎么办 苹果6icloud满了怎么办 电脑内存槽坏了怎么办 苹果7照片删不了怎么办 屋里太冷怎么办小妙招 天气太热,没空调怎么办 8岁儿童发烧39度怎么办 4岁儿童发烧39度怎么办 6岁儿童发烧39度怎么办 手机被晒得很烫怎么办 子宫肌瘤引起的贫血怎么办 月子没做好腰疼怎么办 狗狗屁股流血水怎么办 狗狗屁股在流血怎么办 劳累引起的腰疼怎么办 心口发闷堵的慌怎么办