import java.awt.Color;

/**

* 只要改变getDelColors()中的算法就会出现不同渐变效果!!! 最简单的就是循序等额递减!!

* 然后到处使用该Panel替代默认的JPanel,然后将上面的其他控件都设置成透明(setOpaque(false)),则整个系统就会显得很漂亮了!

* 其他Swing控件都可以类似重构!!!

* 但如果把其他控件都设成透明的,然后最后都加载在该面板上面,则其他控件都无需重构就会出现效果!!比如:

* JTree tree= new JTree(); //

* tree.setOpaque(false); //透明!

* JScrollPanel scroll = new JScrollPanel(tree); //

* scroll.setOpaque(false); //透明

* scroll.getViewPort().setOpaque(false);

* TestBGPanel panel = new TestBGPanel(new BorderLayout()); //创建渐变效果面板

* panel.add(scroll); //将滚动框加载进来,则这个树的背景就是渐变效果了,则界面就丰富了!!!

* @author xch

*

*/

public class TestBGPanel extends JPanel {

@Override

/**

* 关键是重构该方法!!

* 也可以重构JPanel的该方法

*/

public void paint(Graphics g) {

Graphics2D g2 = (Graphics2D) g; //

int li_beginx = (int) g2.getClipBounds().getX(); //

int li_beginy = (int) g2.getClipBounds().getY(); //

int li_width = this.getWidth();

int li_height = this.getHeight(); //

g2.setColor(Color.BLACK); //

g2.drawRect(li_beginx, li_beginy, li_width - 1, li_height - 1); //画边框

Color bgColor = this.getBackground(); //

int[] li_fromcolor = new int[] { bgColor.getRed(), bgColor.getGreen(), bgColor.getBlue() }; //传入的背景颜色的RGB的值!

int[][] li_delcolors = getDelColors(li_fromcolor, li_height - 2); //关键计算,根据高度,计算出每帧高度的渐变颜色!!!

for (int i = 0; i < li_delcolors.length; i++) { //循环画出每一帧!!

int li_r = li_fromcolor[0] + li_delcolors[i][0]; //R

int li_g = li_fromcolor[1] + li_delcolors[i][1]; //G

int li_b = li_fromcolor[2] + li_delcolors[i][2]; //B

if (li_r > 255) { //如果溢出255,则当255,否则报错!

li_r = 255;

}

if (li_g > 255) {

li_g = 255;

}

if (li_b > 255) {

li_b = 255;

}

g2.setColor(new Color(li_r, li_g, li_b)); //设置颜色!!

g2.fillRect(0 + 1, i + 1, li_width - 2, 1); //

}

g2.setColor(Color.WHITE); //

g2.setFont(new Font("宋体", Font.PLAIN, 12)); //

g2.drawString("编辑", 30, 17); //

}

//颜色递减!!! 即要有一个算法,呈某种递减速度就会出现不同效果!!!

//出现光感效果的原理是上半部

private int[][] getDelColors(int[] _fromColor, int _height) {

int[][] delColor = new int[_height][3]; //

int li_half = _height / 2; //一半!

if (li_half == 0) {

li_half = 1;

}

int li_d1 = 100 / li_half; //如果是10,则递减10,如果是100,则递减1

if (li_d1 == 0) {

li_d1 = 1;

}

int li_prefix = 57; //有个前辍,可以随便设个值,就看你想渐变得白的还是黑的!

for (int i = li_half - 1; i >= 0; i--) { //

delColor[i][0] = li_prefix + (li_half - 1 - i) * li_d1;

delColor[i][1] = li_prefix + (li_half - 1 - i) * li_d1;

delColor[i][2] = li_prefix + (li_half - 1 - i) * li_d1;

}

int li_d2 = (int) ((100 / li_half) * 0.7); //关键这里有个系数变化,才会出现光感,水波等效果

if (li_d2 == 0) {

li_d2 = 1;

}

for (int i = li_half; i < _height; i++) {

delColor[i][0] = (i - li_half) * li_d2; //

delColor[i][1] = (i - li_half) * li_d2; //

delColor[i][2] = (i - li_half) * li_d2; //

}

return delColor;

}

//主方法

public static void main(String[] _args) {

JFrame frame = new JFrame("Java渲染水晶按钮"); //

frame.setSize(500, 300); //

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //

frame.getContentPane().setBackground(Color.WHITE); //

frame.getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5)); //

//一批背景颜色!!

Color[] colors = new Color[] { new Color(3, 26, 61), new Color(76, 93, 142), new Color(0, 35, 250), new Color(144, 29, 67), new Color(158, 84, 167), new Color(75, 93, 75), //

new Color(126, 125, 76), new Color(75, 75, 49), new Color(55, 55, 55), new Color(101, 40, 34), new Color(75, 48, 132), new Color(35, 65, 105), //

};

for (int i = 0; i < colors.length; i++) { //根据背景颜色创建一系列面板!!!

TestBGPanel panel = new TestBGPanel(); //

panel.setPreferredSize(new Dimension(150, 30)); //

panel.setBackground(colors[i]); //

frame.getContentPane().add(panel); //

}

frame.setVisible(true); //

}

}

大小: 21.8 KB

分享到:

2012-04-21 13:59

浏览 2734

评论

发表评论

文章已被作者锁定,不允许评论。

java 水晶按钮_java渲染水晶按钮相关推荐

  1. java如何使用水晶报表_Java操作水晶报表

    Java操作水晶报表DAO类: public static ResultSet getResultSet(final int scrollType) { ResultSet resultSet = n ...

  2. java的文本框如何回车键触发按钮_java回车触发按钮的代码

    使用的时候,只要将SwingUtils .enterPressesWhenFocused(JButton)这样就可以实现回车时候,触发按钮. 另外文本输入框回车触发事件则是:SwingUtils .e ...

  3. java 保存 设置_java的保存按钮怎么设置?

    java的保存按钮怎么设置? 关注:291  答案:2  mip版 解决时间 2021-01-30 12:03 提问者我不想放过你 2021-01-29 13:34 不要用java.swing中的类 ...

  4. java回车触发按钮_java回车触发按钮的代码

    可以实现回车触发按钮,或者是在文本输入框的时候,回车触发一个事件. 使用的时候,只要将SwingUtils .enterPressesWhenFocused(JButton)这样就可以实现回车时候,触 ...

  5. java界面添加按钮_java界面添加按钮

    我只是想实现一个图片背景上有一个开始游戏的图片样式的按钮点击按钮进入下一个界面开始游戏我定义MyJPanel继承JPanel然后覆写paint方法添加背景在定义MyJButton继承JButton然后 ...

  6. java中图标_java中图标按钮

    关于 java中图标按钮的搜索结果 问题 求教如何在按钮中嵌入图标 求高手告诉我,我的问题出在哪里,我想了一上午都没想出来,我想的是设置按钮的图标而不是背景, 未设置按钮图标之前运行的效果 设置按钮图 ...

  7. java关闭窗口按钮_java swing 使用按钮关闭窗口

    目的是给JButton添加点击操作,使指定JFrame窗口关闭. 网上不少说法是采用frame.dispose();的方法 但是采用frame.dispose();并没有使添加在frame上的wind ...

  8. java判断按钮_java判断哪个按钮被点击

    语法错误就出现在分号那里,别的错误,你没有代码,我不清楚.我只好给你写了个示范 效果图 代码import java.awt.FlowLayout; import java.awt.event.Acti ...

  9. java jbutton文字_java JButton 改变按钮文字

    展开全部 因为 i 和 j 是局部变量,62616964757a686964616fe78988e69d8331333337383933在内部类中不允许访问局部变量,如果要访问必须添加 final.所 ...

  10. Java 动作事件_java按钮动作事件

    1. Java事件处理三要素: 1) 事件源(Event Source):即事件发生的场所,就是指各个组件,如按钮等,点击按钮其实就是组件上发生的一个事件: 2) 事件(Event):事件封装了组件上 ...

最新文章

  1. 云栖专辑|阿里开发者们的第二个感悟:PG大V德哥的使命感与开放心态
  2. Mysql统计分组区间的人数和 1
  3. 用户密码登录改造实现
  4. 载winpcap4.1.1_最常用的11个电缆载流量数据表,建议收藏备用
  5. 网络之路——交换机基础篇
  6. MySQL数据库实验
  7. ASP.net和ASP的区别
  8. 软件安装和使用系列(一)CyberDuck的安装和使用
  9. shell(37) : java控制台运行打印颜色字体
  10. java node对比_服务端I/O性能:Node、PHP、Java、Go的对比
  11. MacBooster 7 mac 破解版永久激活方法无需激活码
  12. 软件测试需要学什么?测试学习大纲梳理
  13. 【Vue】基础系列(八)数据绑定以及姓名案例的三种写法
  14. 数据库-进阶6-连接查询
  15. 转:为什么谷歌越来越牛逼,而百度却...
  16. Python 数据分析之Numpy
  17. 当车载视觉遇上工业视觉(一)
  18. PCIe 5.0 spec学习1.1---均衡
  19. 主动声呐波束形成均匀线阵Matlab仿真
  20. 国际知名服装品牌网站集合

热门文章

  1. launch 文件解析
  2. winHex数据恢复(第一篇)
  3. FL Studio的音频录制插件Edison
  4. WWW 指南-万维网联盟(World Wide Web)
  5. (转)《蜗居》带给校园男女多少悲喜
  6. 在Java中为JFrame添加背景音乐
  7. Java小游戏中加背景音乐--有图有真相
  8. 《深入理解java虚拟机》学习-第三章-内存分配策略
  9. php liger 表格排序,LigerUI中通过加载服务端数据进行表格的分页显示
  10. 领域驱动设计(1) DDD的一些基础概念