老java程序员谈谈要不要学swing
在早期JDK1.0发布时,Sun公司就为GUI开发提供了一套基础类库,这套类库被称为AWT(Abstract Window Toolkit),即抽象窗口工具包。AWT的起初设想就是为了统一实现不同操作系统的图像界面,但问题是,不同操作系统图形库的功能可能不一样(比如按钮,在不同系统的就表现不一样),在一个平台上存在的功能在另外一个平台上则可能不存在,为此AWT不得不通过牺牲功能来实现平台无关性。不仅如此,AWT还是一个重量级组件,使用比较麻烦,且设计出的图形界面不够美观功能也非常有限。为此,Sun公司对AWT进行改进,提出了Swing组件,提供了更加丰富的组件和功能,来满足GUI设计的一切需求。
Swing是一个用于开发Java应用程序用户界面的开发工具包。使用 Swing 来开发图形界面比 AWT 更加优秀,因为 Swing 是一种轻量级组件,它采用纯 Java 实现,不再依赖于本地平台的图形界面,所以可以在所有平台上保持相同的运行效果,对跨平台支持比较出色。除此之外,Swing 提供了比 AWT 更多的图形界面组件,Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
为了和 AWT 组件区分,Swing 组件在javax.swing.*
包下,类名均以 J 开头,例如: JFrame、JLabel、JButton等,而在AWT中叫Frame、Label等。
1)做系统,比如医院的软件。
2)做各种小游戏,提升逼格。
3)Intellij IDEA就是java swing开发的
4)毕业设计用的挺多。
Swing 中容器可以分为两类:顶层容器和中间容器,容器类都是继承自 Container 类。
是进行图形编程的基础,一切图形化的东西都必须包括在顶层容器中。Swing中有三种顶层容器,分别是JFrame、JDialog 和 JApplet。
是容器组件的一种,也可以承载其他组件,但中间容器不能独立显示,必须依附于其他的顶层容器。常见的中间容器有 JPanel、JScrollPane、JTabbedPane 和 JToolBar。
1)FlowLayout(流式布局)
流式布局管理器:按水平方向依次排列放置组件,排满一行,换下一行继续排列。
2)GridLayout(网格布局)
网格布局管理器:按指定行列数分隔出若干网格,每一个网格按顺序放置一个控件。
3)GridBagLayout(网格袋布局)
网格袋布局管理器:每个组件可占用一个或多个网格,可将组件垂直、水平或沿它们的基线对齐。
4)BoxLayout(箱式布局)
箱式布局管理器:它把若干组件按水平或垂直方向依次排列放置。
5)GroupLayout(分组布局)
分组布局管理器:将组件按层次分组(串行 或 并行),分别确定 组件组 在 水平 和 垂直 方向上的位置。
6)CardLayout(卡片布局)
卡片布局管理器:它将容器中的每个组件看作一张卡片,一次只能看到一张卡片,其他卡片被遮住。
7)BorderLayout(边界布局)
边界布局管理器:它把 Container 按方位分为 5 个区域(东、西、南、北、中),每个区域放置一个组件。
8)SpringLayout(弹性布局)
弹性布局管理器:通过定义组件四条边的坐标位置来实现布局。
9)null(空布局)
空布局:也叫绝对布局,通过设置组件的坐标和宽高来布置组件。
看起来有很多是不是很吓人,其实不然,我们主要掌握以下4种
1、边界布局(BorderLayout)
2、流式布局(FlowLayout)
3、网格布局(GridLayout)
4、null(空布局)
组件名称 | 定义 |
---|---|
JButton | 按钮,可以设置背景图片或文字 |
JCheckBox | 复选框组件 |
JComboBox | 下拉列表框,可以在下拉显示区域显示多个选项 |
JFrame | 框架类 |
JDialog | 对话框 |
JLabel | 标签组件 |
JRadioButton | 选按钮 |
JList | 代表能够在用户界面中显示一系列条目的组件 |
JTextField | 文本框 |
JPasswordField | 密码框 |
JTextArea | 文本区域 |
JOptionPane | 对话框 |
1.实例化JFrame对象,也就是创建一个窗体。
2.设置窗体的相关属性。
3.获取一个容器。
4.创建组件。
5.向容器添加组件。
6.使窗体可视。
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
public class SwingLearn {
public static void main(String[] args) {
//实例化 JFrame
JFrame frame = new JFrame();
//设置相关属性
frame.setTitle("Swing学习");//标题
frame.setSize(300,300);//窗体大小
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击关闭按钮是关闭程序
frame.setLocationRelativeTo(null); //设置居中
frame.setResizable(false); //不允许修改界面大小
//获取容器
Container container = frame.getContentPane();
frame.setLayout(null);
//创建按钮
JButton jButton = new JButton("我是按钮");
jButton.setBounds(100, 100, 100, 40);
//按钮添加到容器中
container.add(jButton);
//设置显示
frame.setVisible(true);
}
}
1)运行Swing程序,用户的电脑上必须有java运行环境,这个不太现实也很不方便。
2)本身用Swing开发出来的客户端本身比较大,客户端也需安装到用户的电脑上。
3)如果遇到不同的操作系统,需要为不同的操作系统开发一套客户端。
4)B/S系统的强势崛起,因为B/S架构多用WEB网页进行开发,不需要安装客户端,在浏览器上打开,一旦代码发生变更,客户端不需要进行升级。
初学Java的同学可能会觉得敲代码比较枯燥无味,自己辛苦写的代码却只能在控制台打印出来,感受不到交互、没有用户体验,Swing刚好解决了这一问题。
有人可能要说,现在web方向那么火,直接学web不就行了,其实web也有很多东西要学,对编程初学者来说接受那么多的语言太不友好,也很困难,比如:jsp、html、JavaScript、css甚至 node.js、vue.js,初学者如果这么做,等于入门即地狱。
学习Swing需要花很多时间和精力吗?答案不需要
1)Swing是基于java语法,学了java使用它就没有什么门槛,也不需要过渡,并没有要学习接触新的语言。
2)学习常用布局、常用的组件、常用的容器。这些都相对比较固定,上手容易。
3)绘图的学习,绘制也相对比较简单,学会可以做很多小游戏,装逼利器。
学习swing能带来什么?
1)学习java不再是简单无趣的System.out....,用swing有用户体验,提升成就感、信心。
2)如果是做小游戏,能够很好练习线程的使用、业务逻辑的处理。
3)布局,常用的组件等,对于以后学习web也是有一定帮助的,因为它们有着类似的设计思想。
4)绘图的语法与JavaScript canvas语法也是非常的接近,学会了swing绘图,何愁canvas不会?
5)Swing本身就是非常优秀的,通过使用可以学习它的设计思想。
不建议学,除非有特殊要求(开发需要、自己爱好、装逼用)
还是多学习框架,比如Struts、spring、springboot、Hibernate,考虑前端的话框架 node.js、 vue.js等。
Swing必要的时候,可以自己再去研究一下,java基础好了学习很容易。