1 ////////////////////////////////////////////////////////////////////////////////////
  2 //
  3 // 文件名: nButton.java
  4 //
  5 // 功  能: 自定义按钮
  6 //
  7 // 备  注: 按钮设置大小时,应比实际图片大小宽1、高1象素。
  8 //
  9 /////////////////////////////////////////////////////////////////////////////////////
 10 import java.awt.*;
 11 import java.awt.geom.*;
 12 import javax.swing.*;
 13 import java.io.*;
 14 
 15 public class nButton extends JButton
 16 {
 17     
 18     Image img;
 19     public Color back;
 20     ImageIcon icon = new ImageIcon ();
 21     public nButton()
 22     {
 23         super ();
 24         Dimension size = getPreferredSize ();
 25         size.width = size.height = Math.max (size.width, size.height);
 26         setPreferredSize (size);
 27         //这个调用使JButton不画背景,而允许画一个圆的背景。
 28         setContentAreaFilled (false);
 29     }
 30     
 31     
 32     public nButton(String label)
 33     {
 34         super (label);
 35         // 这些声明把按钮扩展为一个圆而不是一个椭圆。
 36         Dimension size = getPreferredSize ();
 37         size.width = size.height = Math.max (size.width, size.height);
 38         setPreferredSize (size);
 39         
 40         //这个调用使JButton不画背景,而允许我们画一个圆的背景。
 41         setContentAreaFilled (false);
 42     }
 43     
 44     // 画圆的背景和标签
 45     protected void paintComponent (Graphics g)
 46     {
 47         if (getModel ().isArmed ())
 48         {
 49             
 50             // 可以选一个高亮的颜色作为圆形按钮类的属性
 51             g.setColor (back);
 52         }
 53         else
 54         {
 55             g.setColor (back);
 56         }
 57         g.fillRect (00, getSize ().width, getSize ().height);
 58         
 59         //这个调用会画一个标签和焦点矩形。
 60         super.paintComponent (g);
 61     }
 62     
 63     
 64     public void setImageIcon (Image img)
 65     {
 66         this.img = img;
 67     }
 68     
 69     // 用简单的弧画按钮的边界。
 70     protected void paintBorder (Graphics g)
 71     {
 72         //g.setColor(back);
 73         //g.drawRect(-1, -1, getSize().width + 1 , getSize().height + 1);
 74     }
 75     
 76     
 77     // 侦测点击事件
 78     Shape shape;
 79     public boolean contains (int x, int y)
 80     {
 81         // 如果按钮改变大小,产生一个新的形状对象。
 82         if (shape == null ||
 83                 !shape.getBounds ().equals (getBounds ()))
 84         {
 85             shape = new Ellipse2D.Float (00, getWidth (), getHeight ());
 86         }
 87         return shape.contains (x, y);
 88     }
 89     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 90     //下面都是测试代码
 91     public void init ()
 92     {
 93        icon = new ImageIcon (getClass ().getResource ("clear1.jpg"));
 94        this.setIcon((Icon) icon) ;
 95        icon = new ImageIcon (getClass ().getResource ("clear2.jpg"));
 96        this.setRolloverIcon((Icon) icon);
 97        this.setPressedIcon ((Icon) icon);
 98         //return icon;
 99     }
100     public static void main (String args[])
101     {
102         JFrame frame = new JFrame ("test");
103         frame.setLayout(null);
104         nButton btn = new nButton();
105         btn.init();
106        btn.back = frame.getContentPane ().getBackground () ;
107         btn.setToolTipText ("test");
108         btn.setBounds (100,100 ,62,21) ;
109         frame.add (btn);
110         frame.setSize (300,300);
111         frame.setVisible (true);
112         frame.setDefaultCloseOperation (3);
113     }
114     
115 }
116 
117 
posted on 2007-02-06 16:58 -274°C 阅读(376) 评论(0)  编辑  收藏 所属分类: JAVA

只有注册用户登录后才能发表评论。


网站导航:
 

常用链接

留言簿(21)

随笔分类(265)

随笔档案(242)

相册

JAVA网站

关注的Blog

搜索

  •  

积分与排名

  • 积分 - 911532
  • 排名 - 40

最新评论