所有栏目 | 云社区 美国云服务器[国内云主机商]
你的位置:首页 > 云社区 » 正文

为什么一提到java的swing和awt组件,大家都不建议学?

发布时间:2020-04-12 08:36:03

资讯分类:awt  swing  java  组件  方式  容器  开发
为什么一提到java的swing和awt组件,大家都不建议学?

早期的java主要是应用在web开发方面,所以从实用的角度出发,确实可以略过AWT和Swing的学习。在移动端开发流行之后,AWT和Swing又成为一个必修的内容了,因为做Android开发如果有一定的AWT基础是比较好的,很多概念是统一的。

为了描述这个问题,我们首先要了解到底什么是AWT,什么是Swing,以及它们与Android开发有什么联系。


AWT与Swing


java语言第一个支持图形界面开发的API就是AWT,在AWT中定义了java图形界面的很多核心概念,所以要了解java的图形界面开发方式一定要从了解AWT开始。下面分别介绍一下AWT中的三个核心概念:容器、组件、布局。

  1. 图形容器是存放图形元素的场所和环境,java中把容器分为顶级容器和次顶级容器。顶级容器可以单独显示、次顶级容器不能单独显示。顶级容器的代表是Frame,次顶级容器的代表是Panel。

  2. 图形组件是具体的图形应用元素,比如Button(按钮)、TextField(文本框)、Label(标签)、Choice(下拉列表)等等,每一个图形组件代表一种具体的图形应用元素。

  3. 布局的作用是安排图形组件在容器中的排列样式,常见的布局方式有BorderLayout、FlowLayout和GridLayout等。其中BorderLayout是Frame的默认布局管理器,FlowLayout是Panel的默认布局管理器。

具体的图形开发根据不同的界面设计采用不同的容器、布局和组件进行搭配组合,复杂的图形组件遵循顶级容器嵌套次顶级容器的方式来完成。

Swing与AWT相比较最大的优点是轻量级方式,Swing不依赖于本地操作系统,所以在样式上能够进行统一。在写法上采用了在AWT的类名基础上增加一个大写的J字符,比如在AWT中的Frame改为JFrame,Button改为JButton等等。

在实际的开发中比较推荐使用Swing的方式,一个原因是Swing的组件在外观上更具备科技感,另一个原因是它占用的资源较AWT更少。


事件处理


说到AWT和Swing一定要说一下图形组件的事件处理方式,Java中的事件处理方式采用了监听的方式,也可以称为“代理”的方式。事件处理类通过实现具体的接口来完成对应的事件处理,比如ActionEvent对应的ActionListener接口;KeyEvent对应的KeyListener接口;MouseEvent对应的MouseListener接口和MouseMotionListener接口;WindowEvent对应的WindowListener接口等等。

这种处理方式让图形界面类和事件处理类进行了有效的分离,在代码处理上更加方便和灵活,在Swing的很多组件中也遵循了MVC的结构,让代码更加容易模块化。

总的来说java中的事件处理并不复杂,通过一定的实验就能完全掌握,所有这并不是学习的负担。


AWT与Android开发的关系


传统的java图形处理方式并不完全适用于Android开发,在Android开发中通常采用配置文件的方式来完成Activity的创建,当然也可以使用代码的方式来完成Android的界面开发。

不管使用哪种方式来创建Android界面,大体的概念是一致的,比如布局、组件等等,只不过名称上有所区别,比如AWT中的Flowlayout对应于Android的布局是LinearLayout等,虽然名称不同但是概念是一致的。

事件处理方式也是大体一致,不过android开发中提供了基于回调的事件处理方式,这种方式在做一些简单的事件处理时比较方便。

所以如果将来要从事Android开发还是建议系统地学习一下AWT或Swing。

关注我,学习更多关于java开发的内容。

为什么一提到java的swing和awt组件,大家都不建议学?

awt基于平台模拟平台ui,swing是绘制出来的,都是非常老的产品了,速度慢(jtextpane),如果想把界面弄漂亮,要花很多功夫自己重写皮肤,而且当年开发的那批牛逼程序猿都从sun离职了,如hans muller,所以,可以说是没落的贵族了

为什么一提到java的swing和awt组件,大家都不建议学?

桌面应用领域不是java所擅长的

在桌面应用领域,主流还是C++,C++有很多的图形界面框架,比如大名鼎鼎的QT,比如落伍的MFC,比如GTK+。

我见过很多公司还在使用MFC,界面非常难看,不过做一些设置软件已经足够了。

也看过很多的公司用QT开发过一些比较好看的桌面应用,不过最后很多都转到了B/S模式。

没有市场的C/S模式

在手机端,原生应用非常火,但是在桌面应用领域却很少有客户需要开发桌面应用。

一方面是每次更新了应用,客户都需要手动更新,很多用户都不愿意进行更新操作。

另一方面是运维人员,很多的运维维护人员都很痛恨更新客户端,更新客户端经常会有各种莫名其妙的问题的,做过运维的朋友一定明白我的说法,所以经常给用户灌输B/S模式优于C/S模式。

但不管怎么样,C/S模式在国内一点都不流行,我已经见过不少的升级项目就是为了转向B/S。

java的下一代界面库JavaFX

JavaFX采用了很多新颖的设计理念,比如绑定,类似angularjs双向绑定,比如支持CSS,比如本地编译,但是就是这样JavaFX还是没有流行起来。

曾经使用JavaFX开发过几个应用,你知道我那个时候在网上只找到一两个对JavaFX进行二次封装的框架。

Swing AWT JavaFX优秀的框架

这三个界面库都是很优秀的框架,如果你是因为个人的爱好而想要学习钻研的话,那是很值得学习的,特别是从AWT、Swing、JavaFX的学习使用过程中可以很显著地看出上一代界面库的缺点,以及界面库设计理念的变化,你可以很深入理解导致sun公司推出了Swing、JavaFX新一代界面库的原因。

总结

但也仅仅就这样而已,你在工作中根本就使用不到这三个框架,你也不是从事桌面软件设计,你的付出得不到回报。

为什么一提到java的swing和awt组件,大家都不建议学?

工作中我用过swing开发过,而且用的时间不短,至少7到8年吧,我来说一下为什么大家都不建议学的原因吧。

首先我们先要搞清楚awt跟swing是什么东西,只有搞清楚了才能知道这个有没有用。swing跟awt是java提供的一套gui组件库,例如按钮,文本框等等。java最初只有awt,由于java是跨平台的,所以awt只是提供了各个平台都有的组件,这就导致awt提供的组件很少,在开发UI界面时不好用,所以后来就又搞了个swing。swing不是来替代awt的,它是awt的扩展,它提供的所有的组件都是绘制出来的。awt是重量组件,swing是轻量组件。为什么叫轻量组件跟重量组件,因为awt的组件都是操作系统提供的,而swing组件都是绘制出来的。

如果要用java开发桌面程序,awt跟swing是一个选择。为什么是一个选择呢,因为还存在其它的选择。例如swt,javafx这些。swt也是一个组件库,它的机制有点像是awt跟swing的结合体。swt提供的组件如果系统有,就使用系统的,如果没有就自己绘制一个,是不是跟awt跟swing类似。swt由于这种机制决定了它不是跨平台的,另外它的速度要比swing快,而且它比awt跟swing好看。javafx是后来推出的,个人没用过,不好解释。

从上面的介绍就知道这个是做界面,而java目前主要的应用场景是做后台的,用这个开发界面最大的问题就是不好看,所以一般很多人都不会学这个,所以如果不是从事UI相关的也就不推荐学习这个了。

前面说了java主要场景是后台的,当然了也有用java做桌面程序的,但是比较少,例如永中office,eclipse,lotus notes等等。永中office是用awt跟swing做的,原生的awt跟swing比较难看,但是永中office看上去不像原生的,这主要是永中公司它们基于swing自己实现了一套组件库。eslipse是基于swt的。下面分别是swing

这是永中office

这是eclipse

由于用java开发桌面软件的需求很少,所以一般不推荐学习awt跟swing。当然了多学还是有好处的,像swing的很多组件都是基于MVC的思想设计的,组件的事件机制都是基于观察者模式的。

为什么一提到java的swing和awt组件,大家都不建议学?

这两个组件库本身并没有太大的问题,不过如果你想用java编写gui应用,可以考虑使用javafx,会有更好的效果。

不过归根结底还是java在写界面应用上的尴尬,在初期大家更佳倾向于使用c++去写界面,而且vb和c#在windows下开发界面应用的体验实在太好了,对于在Linux下大家似乎更关心命令行的应用,这就导致了java本身并不太擅长gui的开发。

不过如果你真的想开发gui的应用,那么electron是一个很值得参考的技术。

为什么一提到java的swing和awt组件,大家都不建议学?

是没有啥客户端软件用swing/awt了,不过也有,比如著名的intellij idea就是,看你自己了,站在学习的角度,多学点东西自然没有坏处,不过站在工作的角度,的确不太可能用到,现在的java应该主要还是服务端了。

而且就算要用java写客户端软件,你也可以考虑javafx,这也是java中用于替代swing的下一代产品,也是包含在jdk中的

swing的缺点的话,界面表示,处理逻辑,数据都耦合在一起应该算一个,就像把前端的js,html和数据放在一起,业务复杂点,用这个弄起来复杂度就会直线上升。javafx已经可以分离处理逻辑和界面显示了,相对好一点,毕竟下一代嘛

留言与评论(共有 0 条评论)
   
验证码:
Top