相关文章推荐
闯红灯的馒头  ·  MySQL ...·  11 月前    · 
不爱学习的课本  ·  [NewtonSoft.Json] ...·  1 年前    · 
鬼畜的薯片  ·  web-msg-sender ...·  1 年前    · 


老Java程序员谈谈Swing要不要学


老java程序员谈谈要不要学swing


Swing是什么?

1)AWT

在早期JDK1.0发布时,Sun公司就为GUI开发提供了一套基础类库,这套类库被称为AWT(Abstract Window Toolkit),即抽象窗口工具包。AWT的起初设想就是为了统一实现不同操作系统的图像界面,但问题是,不同操作系统图形库的功能可能不一样(比如按钮,在不同系统的就表现不一样),在一个平台上存在的功能在另外一个平台上则可能不存在,为此AWT不得不通过牺牲功能来实现平台无关性。不仅如此,AWT还是一个重量级组件,使用比较麻烦,且设计出的图形界面不够美观功能也非常有限。为此,Sun公司对AWT进行改进,提出了Swing组件,提供了更加丰富的组件和功能,来满足GUI设计的一切需求。

2)Swing

Swing是一个用于开发Java应用程序用户界面的开发工具包。使用 Swing 来开发图形界面比 AWT 更加优秀,因为 Swing 是一种轻量级组件,它采用纯 Java 实现,不再依赖于本地平台的图形界面,所以可以在所有平台上保持相同的运行效果,对跨平台支持比较出色。除此之外,Swing 提供了比 AWT 更多的图形界面组件,Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。

为了和 AWT 组件区分,Swing 组件在 javax.swing.* 包下,类名均以 J 开头,例如: JFrame、JLabel、JButton等,而在AWT中叫Frame、Label等。

Swing能够干什么?

1)做系统,比如医院的软件。

2)做各种小游戏,提升逼格。

3)Intellij IDEA就是java swing开发的

4)毕业设计用的挺多。

Swing容器

Swing 中容器可以分为两类:顶层容器和中间容器,容器类都是继承自 Container 类。

顶层容器:

是进行图形编程的基础,一切图形化的东西都必须包括在顶层容器中。Swing中有三种顶层容器,分别是JFrame、JDialog 和 JApplet。

中间容器:

是容器组件的一种,也可以承载其他组件,但中间容器不能独立显示,必须依附于其他的顶层容器。常见的中间容器有 JPanel、JScrollPane、JTabbedPane 和 JToolBar。

awt java 是什么意思 java awt还有人用吗_awt java 是什么意思

Swing布局

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(空布局)

Swing常用组件

组件名称

定义

JButton

按钮,可以设置背景图片或文字

JCheckBox

复选框组件

JComboBox

下拉列表框,可以在下拉显示区域显示多个选项

JFrame

框架类

JDialog

对话框

JLabel

标签组件

JRadioButton

选按钮

JList

代表能够在用户界面中显示一系列条目的组件

JTextField

文本框

JPasswordField

密码框

JTextArea

文本区域

JOptionPane

对话框

如何创建Swing窗体程序

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);
}

awt java 是什么意思 java awt还有人用吗_awt java 是什么意思_02

Swing为什么发展不好?

1)运行Swing程序,用户的电脑上必须有java运行环境,这个不太现实也很不方便。

2)本身用Swing开发出来的客户端本身比较大,客户端也需安装到用户的电脑上。

3)如果遇到不同的操作系统,需要为不同的操作系统开发一套客户端。

4)B/S系统的强势崛起,因为B/S架构多用WEB网页进行开发,不需要安装客户端,在浏览器上打开,一旦代码发生变更,客户端不需要进行升级。

swing要不要学?

1)java初学者和学校学生

初学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本身就是非常优秀的,通过使用可以学习它的设计思想。

2)有相对较好java基础

不建议学,除非有特殊要求(开发需要、自己爱好、装逼用)

还是多学习框架,比如Struts、spring、springboot、Hibernate,考虑前端的话框架 node.js、 vue.js等。

Swing必要的时候,可以自己再去研究一下,java基础好了学习很容易。

看到这里的大佬,动动发财的小手 点赞 + 回复 + 收藏 ,能关注一波就更好了。

欢迎大家留言一起讨论!