33 个回答
首先,Swing和SWT,这两个属于GUI技术,而且是十分成熟的技术,使用SWT+JFace开发的软件,最著名的就是Eclipse,Swing的则可以参考IntellijIDEA和NetBeans,这样你大概就能知道这两个技术都是什么了。
我想,除非你只用命令行或者启动之后就不用管的自动程序,像是Web服务器什么的,只要你想做点什么自己用,这两个都是很好的技术选择。
有人会说web,web虽然启动之后什么都不用管,直接浏览器做界面,很美观,但是web是需要一个浏览器的,而且先启动服务再打开浏览器,总感觉会比较麻烦。
所以如果想做一些小东西,还是要用java的gui框架,其实我不太建议SWT,因为他不好看,而且你的功能多了之后,SWT在一些方面比较麻烦,我感觉Swing比SWT友好很多,而且在窗口比较复杂的时候,SWT可能会卡顿。
对于Swing来说,他的好处是界面灵活,但是皮肤资源比较少,做一个好看的swing界面需要费很大的事情,而且Swing已经不再继续维护了,也就是说,不再有人会修复swing的bug了,也不会提供更多的更新,但是现在看来,swing还是很够用的。
相比于以上两者,如果你想做java的窗口程序,我更建议你尝试一下javafx,他可以使用css做到更为灵活和好看的界面。
至于到底要不要学,这个就看你自己的考虑了,其实公司很少会用java编写窗口程序,更多是编写web服务器(比如Spring什么的),但是觉得学一下也很好 ,他很有意思,也可以做出有用的窗口程序,甚至可以打包,复制给其他计算机使用。
如果你以最快找到工作为目标,你可以暂时跳过这一部分,但是如果不是这样,学一下会更好。
看到有些回答说到了QT什么的,这里就继续补充一下。
Qt是商业的框架,它采用C++语言,MFC,GTK这些,都是C/C++所使用的类库,Qt有java的一个绑定包,新一点的是JavaCPP的Qt,老一点的是QtJambi,但是Qt,其实在java平台表现并不好,问题和SWT比较类似,所以如果使用java编写桌面应用,还是应该首先考虑java本身的框架。
Qt本身的特点,例如Qss什么的,javafx的CSS一点也不比它差,目前java新版本,性能提升的非常显著,虽然目前大部分都还在使用java8,但是我相信最终模块化的jdk会随着类库的更新一点点进入实用领域,这些性能的提高在java桌面应用中体现的十分明显。
java的桌面开发,在swing方面完全可以使用idea的窗口设计器,Eclipse的windowBuilder,在JavaFX有SceneBuilder。
所以java适不适合开发桌面应用,我觉得这不是一个问题,单纯的swing应用在jlink之后不再需要完整的jre,其体积大幅度减小,这几乎彻底解决了以前java不适合开发桌面的理由——需要下载或者携带一个很大的运行环境(JRE)。
另外,使用java的,我不知道有多少会在专为GUI去学习C和C++,所以如果一旦需要GUI,优先考虑的就是Swing和JavaFX。
虽然现在移动互联网很好,但是也有很多东西就需要PC端进行操作,不要把它太过神话,像是PS,AutoCAD,这玩意手机就是做不来,不说这个,就算Word,PowerPoint,手机操作感觉和PC端也是两回事。
在某些地方,从事前端或后端,精修一方面的技术是正确的,但是 我们不应该认为,我们对其他的东西一无所知这件事,是理所当然的。
JavaFX相关资料的传送门: