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
分享到:
相关推荐
在这个“自定义水晶按钮”项目中,开发者可能使用了Java的Graphics2D类来绘制按钮的视觉效果。Graphics2D类是Java 2D API的核心,允许开发者进行复杂的2D图形绘制,包括线条、形状、文本以及图像的渲染。通过调整...
在这个案例中,开发者可能使用了矩阵变换和多边形渲染来创建出按钮的立体外观,通过调整顶点坐标、法线向量以及应用不同的纹理映射,使得按钮看起来具有深度和立体感。 VB.NET和C#都是.NET框架下的编程语言,它们...
Java水晶报表开发是一种在Java应用中创建、设计和展示复杂报表的重要技术。水晶报表(Crystal Reports)是由SAP公司开发的一款强大的报表工具,它能够帮助开发者整合数据源,设计美观的报表,并支持导出多种格式,如...
htmlunit 是java编写的对AJAX html(动态网页)进行渲染的有力工具,做互联网信息抓取项目时可能用到
本篇将深入探讨如何利用C#语言和GDI+来制作一个具有水晶质感的按钮。在老师的指导下,通过实践项目,我们可以更好地理解和掌握GDI+的精髓。 首先,了解GDI+的基本概念。GDI+是微软在GDI(Graphics Device Interface...
"vb精美水晶按钮CandyButton"是一个专为VB设计的控件,它提供了一种美观、吸引人的按钮样式,使得VB应用的界面看起来更加精致和现代。 这个控件模仿了“水晶”效果,即透明、立体感强、色彩丰富的视觉感受,这种...
这些表达式可以与后端的Java对象交互,填充数据到模板中,实现页面的动态渲染。 在Java工程中,我们首先需要添加Thymeleaf的依赖。如果你使用的是Maven,可以在pom.xml文件中加入以下依赖: ```xml <groupId>org....
我们将主要关注这些库在渲染字体、排版和整体效果方面的表现,以《三种Java下生成PDF方式的比较》为基础,通过提供的截图进行分析。 1. iText: iText是Java中最著名的PDF库之一,以其灵活性和强大的功能而闻名。...
如果要让自定义按钮与系统主题保持一致,可以使用VisualStyleRenderer类来渲染控件。 10. **文档/视图结构**: MFC通常采用文档/视图架构,文档负责数据,视图负责显示。在这个例子中,“自己绘制按钮.doc”可能是...
本话题将深入探讨如何使用C#来创建自定义控件,特别是以“水晶”风格的按钮控件。自定义控件允许开发者根据项目需求扩展或定制标准控件的功能和外观,以实现独特的用户界面体验。 在C#中,自定义控件通常是通过继承...
在Java编程中,创建具有特定形状的控件,如圆形按钮,可以提升用户界面的美观性和用户体验。这个压缩包文件“Java圆形按钮实例代码,含注释.rar”提供了一个具体的示例,帮助开发者理解如何在Java Swing或JavaFX中...
### Java JSP水晶报表详解 #### 一、水晶报表简介 水晶报表(Crystal Reports)是一款功能强大的报表设计与生成工具,广泛应用于多种开发环境之中。对于Java开发者来说,通过集成Crystal Reports及其Java Reporting ...
java结合imageMagick实现图片渲染合成编辑,源码附送安装文件学习文档。
3. **图形渲染**:水晶效果通常涉及到复杂的图形绘制,可能使用GDI+(Graphics Device Interface Plus)或Direct2D等图形接口来绘制透明、渐变或3D效果。 4. **事件处理**:按钮不仅要有好看的外观,还需要响应用户...
然而,为了创建水晶效果,我们需要自定义控件,继承自`Button`类,并重写其绘图方法,以实现透明背景和特殊的渲染效果。 创建一个新的类,例如`GlassButton`,继承自`Button`: ```csharp public class ...
根据提供的文件信息,我们可以总结出以下关于在C#中生成水晶按钮的相关知识点: ### C#水晶按钮概述 水晶按钮是一种视觉效果美观、具有立体感和平滑边角的按钮控件。这种类型的按钮常用于现代用户界面设计中,以...
在水晶报表的实现中,JSP页面通常会包含用于渲染报表的Java代码或JSP标签。用户通过浏览器请求JSP页面,服务器端执行JSP,生成报表内容,并返回给客户端显示。 4. **Tomcat服务器**:Tomcat是一个开源的、轻量级的...
在压缩包的文件列表中,我们可以看到一系列png图像文件,这些通常是设计的最终渲染结果,可能代表按钮的不同状态或设计选项。PNG是一种常用的位图图像格式,支持透明度,适合用于网页和数字媒体。而“button.psd”是...
开发者需要熟练掌握水晶报表工具,理解Java环境下的报表渲染机制,并熟悉应用服务器如WebSphere的配置和管理。这样的技能对于提供数据可视化和业务洞察至关重要,尤其在需要将大量数据转化为易于理解的报表的场景下...
百度地图自定义地图切片java代码,可运行作为工具使用,建议原图使用png格式