分享
 
 
 

实现类似XP风格的快速按钮

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

实现功能: 类似于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

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;}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有