用swing也可以做出好看的界面
用Swing做出的例子:
JavaFX做出的界面:
后来又做出了自己编写的一套基于Synth的L&F,其与直接在代码中重绘某个组件不同,最大优点是具有可插拔性,即在不改变原有程序代码的情况下,用户可以自己选择切换风格,通用性增强。对于前面的JLayer的界面切换成MyLNF后的效果:
获得焦点效果:
失去焦点后的效果:
鼠标移到Container内容面板上后显示的效果:
最后说下自己的感想:
1、现在Java界面编程真的不是首选。可插拔式的Look and feel不论基于Basic还是Metal编写繁琐,开发周期长。后来1.7推出的Synth基于XML导入式概念虽然新颖,但是对于Components Specific Properties的支持不够例如对于JTable的Properties支持很少导致可定制性降低。基于Nimbus编写的话,首先运行效率不如Metal,然后重绘每个Component也很麻烦,用图片做背景需要九宫格技术的支持。无论如何,Look and feel由于Java内部本身的限制,提供定制的范围确实有限,有些东西你customize不了,因为它没有提供那样的接口。
2、但是简单的界面编写如对动态效果没什么要求,对Desktop集成没什么要求(Java需要调用JNI来集成一些桌面特性,如WIn7任务栏图片的进度加载显示,还有比如SystemTray也只能用AWT的PopupMenu导致没法定制出和QQ、迅雷等一样的托盘效果),使用Swing还是可以的,Swing的优势也就在于跨平台性好,优于SWT。建议简单界面能使用Swing的还是不要使用SWT,对于简单界面,自己编写的L&F也搓搓有余了。
3、对于想要Charts、多媒体支持、动画效果、滤镜支持、触摸事件感应处理等富Internet绚丽界面的追求的话,建议选择用JavaFX,可插拔式用外部链接的CSS代替,一般界面的编写可以用FXML,逻辑处理用Java语言或者JavaScript。这样结构化很明显,也很现代化(参见MVC设计模式)。但是JavaFX目前Bug还是很多,很多功能不完善,比如SystemTray没有支持,Print打印功能也是在未来Java8中绑定,但是对于打印表格table似乎还没有支持(我不大确定,因为我只是初步的看了一下,还没有深入研究)。但其UI组件未来会逐渐增多。
4、目前的话Java界面编写还是JavaFX比较有前途,但是就目前的JavaFX而言似乎没有什么明显的竞争力,只能期待以后的发展了。
5、建议还是用目前主流的软件编写工具(例如论坛同志所说的“要做Desktop GUI 推荐QT C++,ui tool 和 qml 非常易用强大。”)。想要在Windows下使用的话,还是尽量调用本地化的windows API。
6、用数据库相结合的小软件编写,Java还是不错的。内置的JavaDB就不错,MySQL以及Microsoft Database也有很多开发案例,使用Oracle大型数据库就更不用说了。
Swing给我印象最深的就是绘图机制十分强大,至少在引入Android的NinePatch技术上领先JavaFX(如果有同志知道如何在JavaFX上使用类似于Android的NinePatch技术的,非常感谢告知我),一定要深刻理解java界面的绘图机制。像背景图片什么绘制是很简单的,至于图像的缩放,运用ImageOP写个缩放的,或者模糊效果等等,在Java 界面代码中用paintComponent()方法来定制背景图片的可以根据addComponentListener()中的componentResize()来缩放就可以了(使用repaint())。绘制Border或者Button的背景,图片最好使用九宫格技术,防止图片拉伸失真。在Synth中,它自带把图片分为9块的技术,使用起来十分方便,然而不如Android的NinePatch技术,因为她不仅可以分图片为9块,而且可以根据需要分为若干块我非常欣赏。最近正在写一套的基于Nimbus的lnf(当然使用了Android的NinePatch技术),感觉还不错,推荐诸位试一下,我顺带研究JavaFX,觉得前途还是有的,因为Oracle计划不断随着Java8,9,10的推出更新、支持JavaFX。
用swing也可以做出好看的界面的更多相关文章
- Java之Swing体系——制作自己的登录界面
我们制作登陆界面是简单的图形模式,并不具备其他功能: 这里使用两个库,如下: javax.swing.*; java.awt.*; 构造窗体对象要用到很多类,废话不多,直接代码~ package co ...
- cocostudio做出来的界面如何进行分辨率适配,兼论cocos2dx3的多分辨率适配机制,以及retina适配机制
cocos有很多代码实际上都不再使用了,看代码时反而误导了程序员. 比如一个简单的分辨率适配,我查到了setContentSize,然后调用setContentSize,毫无用处啊!于是乎,我到处查资 ...
- jquery 做出专业的界面,SHOW 一下最近的成果~~~
最近在项目中把整个UI框架重新做了一下,都是用Jquery实现的,没有使用EXT.EasyUI那一类的UI框架再也不用担心版权问题啦~~~~~~ 接下来我会在博客中把常用的功能分享出来,先上一下动态T ...
- WebApp简单制作(后端也可以装逼啦)
前端越来越吃香的感觉 年后回来,跟之前和几个同事和朋友聊天,发现有两个.net的和一个php的朋友都转到了前端,真是出乎意料.自从之前的webapp兴起后,前端感觉比后端吃香很多,总结朋友们转的原因, ...
- 使用VS2012主题插件创建自己的主题
上篇文章讲了如何更换VS2012的主题,具体内容请参考:Vistual Studio 2012更换皮肤.可是上面的步骤仅仅让我们可选择的主题是增多了,我们可不可以自己创建自己的主题呢? 答案是肯定的, ...
- 2019-10-23-C#-从零开始写-SharpDx-应用-绘制基础图形
title author date CreateTime categories C# 从零开始写 SharpDx 应用 绘制基础图形 lindexi 2019-10-23 21:16:35 +0800 ...
- 2019-3-8-为何使用-DirectComposition
title author date CreateTime categories 为何使用 DirectComposition lindexi 2019-3-8 8:56:9 +0800 2018-04 ...
- C# 从零开始写 SharpDx 应用 绘制基础图形
本文告诉大家通过 SharpDx 画出简单的 2D 界面 本文属于 SharpDx 系列 博客,建议从头开始读 本文分为两步,第一步是初始化,第二步才是画界面 初始化 先创建 RenderForm 用 ...
- 如何在自己的CSDN博客中增添【高大上】的博客栏目?
前几天看到过一位博主的博客界面,向下看 ☟ (博主对不起啊!把你的公众号给抹了~~~),感觉做这个东西挺好玩的,而且我竟然找不到在哪个地方可以设置!在百度上也没有搜到教程,最后问了一下贺老师知道了入口 ...
随机推荐
- Surface在C++层的创建源码解析
Surface在C++层的创建源码解析 源码为:android4.4.4 1.创建SurfaceComposerClient绘图客户端 // create a client to surfacefli ...
- 安卓APP与智能硬件相结合的简易方案
第1章 概 述 (作者小波QQ463431476) (来源http://blog.chinaaet.com/zhaocundang/p/5100017645博客) (来源 http://www. ...
- js控制div滚动条,滚动滚动条使div中的元素可见并居中
1.html代码如下 <div id="panel"> <div id="div1"></div> <div id=& ...
- jpa
学习尚硅谷jpa笔记: 所依赖的jar包: 首先在META-INF下创建配置文件,persistence.xml <?xml version="1.0" encoding=& ...
- JAVA中使用FTPClient实现文件上传下载实例代码
一.上传文件 原理就不介绍了,大家直接看代码吧 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...
- [LeetCode] Edit Distance 编辑距离
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...
- [转]extjs grid的Ext.grid.CheckboxSelectionModel默认选中解决方法
原文地址:http://379548695.iteye.com/blog/1167234 grid的复选框定义如下: var sm = new Ext.grid.CheckboxSelection ...
- Markdown
1. 斜体和粗体 代码: *斜体*或_斜体_ **粗体** ***加粗斜体*** ~~删除线~~ 显示效果: 这是一段斜体 这是一段粗体 这是一段加粗斜体 这是一段删除线 2. 分级标题 第一种写法: ...
- 学习Struts2的第一个应用步骤
---恢复内容开始--- 一.在官网 http://struts.apache.org/下载struts-2.3.31-all 1. 打开struts-2.3.31-all,将struts-2.3. ...
- JavaScript中的类型转换
1.隐式类型转换 ①== 如果相等操作的两个变量不是同一类型,那么相等运算符会尝试进行一些类型转换: 如果一个是null,一个是undefined,则他们相等: 如果一个值是数字,另一个是字符串,先将 ...