网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  实现类似xp风格的快速按钮     
  文章作者:未知  文章来源:水木森林  
  查看:115次  录入:管理员--2007-11-17  
 


  实现功能: 类似于windows xp中的快速按钮的风格, 允许指定按钮的状态是自弹起(就是鼠标键按下时按钮产生被按下的效果, 鼠标键抬起的时候按钮自动回复原状)着是开关按钮(点击一次, 按钮被按下, 再点击一次, 按钮被弹起), 并能够设定一组(多个)或多组互斥按钮(即同组中有且只有一个按钮一直处于被按下的状态). 当然, 这个类不是很完善, 有许多地方可以改进, 比如没有加入当按钮处于禁止使用的状态(disabled), 应该再引入一个image来显示成灰色的效果等. 您就自己改改吧. :)
  程序代码:
  speedbutton.java
  --------------------------------
  import javax.swing.*;
  import java.awt.*;
  import java.awt.event.*;
  
  public class speedbutton extends jbutton implements mouselistener {
  private boolean entered = false; /* 标志, 用于判断鼠标是否在按钮上 */
  private boolean downed = false; /* 标志, 用于按钮是否被按下 */
  
  private boolean enableddowned = false; /* 标志, 用于按钮是否允许被按下 */
  
  private image image = null;
  private int groupid = 0; /* 指定按钮属于哪个互斥组, 取值为0时不判断 */
  
  private int buttonid; /* 按钮本身的id号, 唯一 */
  
  /**
  * 这个构造器有点烦, 这里可以进行优化成多个构造器来组合.
  * @see com.javax.swing.jbutton
  * @author delfan,2002.07.23
  * @version 1.0
  */
  public speedbutton(int buttonid, image image, int width, int height, string tip, boolean enableddowned,boolean initmode, int groupid, actionlistener actionlistener) {
  this.buttonid = buttonid;
  this.image = image;
  addmouselistener(this);
  setpreferredsize(new dimension(width, height));
  settooltiptext(tip);
  this.enableddowned = enableddowned;
  this.groupid = groupid;
  downed = initmode;
  addactionlistener(actionlistener);
  }
  
  public void paint(graphics g) {
  if (getsize().height == 2 || getsize().width == 2) { // 画分隔条, 当按钮宽度或高度为2的时候,
  g.setcolor(new color(119, 133, 168)); // 认为是分隔条
  g.fillrect(0, 0, getwidth() - 1, getheight() - 1);
  g.setcolor(new color(129, 143, 178));
  g.fillrect(1, 1, getwidth(), getheight());
  setenabled(false);
  }
  else
  {
  if (entered) { // 鼠标在按钮内
  g.setcolor(new color(119, 133, 168));
  g.fillrect(0, 0, getwidth(), getheight());
  g.setcolor(new color(8, 36, 107));
  g.drawrect(0, 0, getwidth() - 1, getheight() - 1);
  if (image != null) g.drawimage(image, 2, 2, getparent());
  } else { // 鼠标不在按钮内
  g.setcolor(getparent().getbackground());
  g.fillrect(0, 0, getwidth(), getheight());
  if (image != null) g.drawimage(image, 2, 2, getparent());
  }
  
  if (downed) { // 按钮被按下
  g.setcolor(new color(181, 190, 214));
  g.fillrect(0, 0, getwidth(), getheight());
  g.setcolor(new color(8, 36, 107));
  g.drawrect(0, 0, getwidth() - 1, getheight() - 1);
  if (image != null) g.drawimage(image, 3, 3, getparent());
  }
  }
  }
  
  public void update(graphics g) {paint(g);}
  
  /**
  * 按钮是否处于按下状态
  */
  public boolean isdowned() {return downed;}
  
  /**
  * 取得按钮的组索引号
  */
  public int getgroupid() {return groupid;}
  
  public void setdowned(boolean downed) {this.downed = downed;repaint();}
  
  public void mouseentered(mouseevent e) {entered = true;repaint();}
  
  public void mouseexited(mouseevent e) {entered = false;repaint();}
  
  public void mouseclicked(mouseevent e) {}
  
  public void mousepressed(mouseevent e) {
  if (enableddowned && downed && groupid == 0)
  downed = false;
  else
  downed = true;
  repaint();
  }
  
  public void mousereleased(mouseevent e) {
  if (!enableddowned) downed = false;
  repaint();
  if (groupid != 0) // 通过存放按钮的容器进行互斥按钮的状态改变操作
  for (int i = 0; i < getparent().getcomponentcount(); i++)
  if (getparent().getcomponent(i) instanceof speedbutton) {
  if (((speedbutton) getparent().getcomponent(i)).getgroupid() == groupid
  && ((speedbutton) getparent().getcomponent(i)) != this)
  ((speedbutton) getparent().getcomponent(i)).setdowned(false);
  }
  }
  
  public int getbuttonid() {return buttonid;}
  
  }
 
 
上一篇: 搜索引擎    下一篇: 论如何成为有高尚职业操守的提问人?
  相关文档
在jboss中配置多个数据库和数据源 11-17
用javabean编写sqlserver数据库连接类 11-16
java程序员需要了解的几个开源协议 11-20
保持对java的敏感度切莫忽视思想研究 11-17
新手入门:jsp初学者必须掌握的语法点 11-17
java中精确计算的一个类用bigdecimal 11-17
java线程编程(一):线程基础 11-17
在j2me编程中使用 nokia 的中文模拟器 11-16
java基础--j2ee开发过程中的异常处理 11-16
学习在j2me中使用代码 11-17
j2ee编程起步(2) 11-17
java和jsp编程应该注意的六个常见问题 11-16
基于eclipse 3.0的swt编程 11-17
入门--java ee/j2ee面向对象编程之道 01-07
简单的 java 循环控制实现行列式算法 11-17
java语言语法-控制结构 11-17
web开发技术比较报告 11-16
ibmjava如何做到高性能gc的实现内幕 11-17
drives 集合 11-16
简单的理解类的继承和多态性 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息