1 Star 4 Fork 1

69岁老头床前撸码 / java-swing-gui

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

1:布局管理器

布局管理器,就是组件在容器内的的花式摆放。

1.1:FlowLayou (流式布局)

根据规则,从左往右(或从右往左)的去顺序布局,容器撑满后自动换行。

概述

​ 流式布局管理器。按水平方向依次排列放置组件,排满一行,换下一行继续排列。排列方向(左到右 或 右到左)取决于容器的componentOrientation属性(该属性属于Component),它可能的值如下:

  • ComponentOrientation.LEFT_TO_RIGHT(默认)
  • ComponentOrientation.RIGHT_TO_LEFT
  • 同一行(水平方向)的组件的对齐方式由 FlowLayout 的align属性确定,它可能的值如下:
    • FlowLayout.LEFT : 左对齐
    • FlowLayout.CENTER : 居中对齐(默认)
    • FlowLayout.RIGHT : 右对齐
    • FlowLayout.LEADING : 与容器方向的开始边对齐,例如,对于从左到右的方向,则与左边对齐
    • FlowLayout.TRAILING : 与容器方向的结束边对齐,例如,对于从左到右的方向,则与右边对齐。

效果图

按钮05,就是容器被撑满后换行之后的布局。

如果再添加个按钮06,那么布局应该是:

  • 按钮03 按钮04
  • 按钮05 按钮06

result.png

1.2:GridLayout (网格布局)

把容器列分成矩形网格。组件放入网格后,组件的宽高自动撑满网格。

概述

​ 网格布局管理器。它以矩形网格形式对容器的组件进行布置,把容器按行列分成大小相等的矩形网格,一个网格中放置一个组件,组件宽高自动撑满网格

以行数和总数优先: 通过构造方法或 setRows 和 setColumns 方法将行数和列数都设置为非零值时,指定的列数将被忽略。列数通过指定的行数和布局中的组件总数来确定。因此,例如,如果指定了三行和两列,在布局中添加了九个组件,则它们将显示为三行三列。仅当将行数设置为零时,指定列数才对布局有效。

效果图

组件的大小撑满了网格,所以组件大小等于网格大小。

result.png

==1.3:GridBagLayout(网格袋布局)?==

概述

​ 网格袋布局管理器。它不要求组件的大小相同便可以将组件垂直、水平或沿它们的基线对齐。每个 GridBagLayout 对象维持一个动态的矩形单元格(动态计算出单个单元格的大小),每个组件占用一个或多个的单元格,该单元格被称为 显示区域。每个组件显示区域按 从左到右,从上到下,依次排列。

效果图

result.png

效果图

==1.4:BoxLayout(箱式布局)?==

看代码效果得知,就是对网格袋布局的封装。

概述

​ 箱式布局管理器。它把若干组件按水平或垂直方向依次排列放置。Swing 提供了一个实现了 BoxLayout 的容器组件Box。使用 Box 提供的静态方法,可快速创建水平/垂直箱容器(Box),以及填充组件之间空隙的不可见组件。用水平箱和垂直箱的组合嵌套可实现类似于 GridBagLayout 的效果,但没那么复杂。

效果图

result.png

==1.5:GroupLayout(分组布局)?==

概述

分组布局管理器。它将组建按层次分组,以决定它们在 Container 中的位置。GroupLayout 主要供生成器使用(生成 并行组 和 串行组)。分组由GroupLayout.Group类的实例来完成,每个组可以包含任意数量的元素(Group、Component 或 Gap)。GroupLayout支持两种组:

  • 串行组 (sequential group):按顺序沿指定方向(水平/垂直)逐个放置元素。
  • 并行组 (parallel group):沿指定方向(水平/垂直)并行排列元素,能够以四种不同方式对齐其子元素。 PS: 串行和并行根据不同的方向(水平/垂直方向),元素的排列方式也不同(从上到下 或 从左到右)。

效果图

result.png

1.6: CardLayout(卡片布局)

将容器内的每个组件当成一张卡片,轮播展示组件。

概述

​ 卡片布局管理器。它将容器中的每个组件看作一张卡片,一次只能看到一张卡片,容器则充当卡片的堆栈,默认显示第一张卡片。

卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件。

效果图

按钮名称在变化,因为组件一直在像卡片切换并显示。

20170604234916596

1.7: BorderLayout(边界布局)

把容器划分成五大区域,每个区域只能放置一个组件。

每个区域只能放置一个组件

每个区域只能放置一个组件

每个区域只能放置一个组件

概述

​ 边界布局管理器。它把 Container 按方位分为 5 个区域(东、西、南、北、中),每个区域放置一个组件。

每个区域只能添加一个组件,如果添加多个,则只显示一个。如果想在一个区域添加多个组件, 则必须在该区域放一个Panel,然后把多个组件放到面板里面。如果每个区域或者若干区域没有放置组件,东西南北区域不会预留位置,而中间区域位置将置空。

效果图

有图有真相

result.png

==1.8: SpringLayout(弹性布局)?==

概述

弹性布局管理器。使用该布局的容器内的每一个组件或容器都对应着一个约束,通过该约束定义组件或容器四条边的坐标位置 来实现对组件的布局。该布局主要涉及三个类: SpringLayoutSpringLayout.ConstraintsSpring,分别表示 布局管理器、约束、坐标距离。

效果图

result.png

1.9:null(绝对布局)

通过设置组件的坐标,将其固定到容器中的某个位置。

概述

null,绝对布局。绝对布局没有特定一个布局管理器类来表示,给容器的布局管理器设置为 null,就表示使用绝对布局,即通过设置组件的坐标和宽高来布置组件。

绝对布局需要明确指定每一个组件的坐标和宽高,否则不显示。

对于使用其他布局时给组件设置坐标和宽高,一般会遵循以下两点:

  • 使用其他布局时,如果在窗口显示之后,再添加新组件,则该组件也会被当做绝对布局对待(即需要手动指定坐标和宽高);
  • 使用其他布局时,如果在窗口显示之后,修改之前添加的组件的坐标和宽高,则该组件也会被当做绝对布局对待(即此时修改坐标和宽高会生效)。

效果图

这几个按钮,位置都是通过坐标写死的。局限性很大,一旦电脑分辨率不一样;展示的效果会出乎意料。

result.png

2:基本组件

基本组件是组成程序的元数据之一,比如按钮、标签、文本框、密码框等。是程序界面必要的,不可或缺的。

2.1: JLabel(标签)

非交互式组件,主要用来展示内容。

概述

标签是一种可以包含文本和图片的非交互组件,其文本可以是单行文本,也可以是 HTML 文本。

效果图

result.png

2.2: JButton(按钮)

常用的交互式组件之一。一般情况下,按钮数量在整个程序中是最多的。

概述

按钮,常用控件之一。通过对按钮的操作,可触发相对应的事件。应用场景广,花样多

效果图

按钮的样式可以千变万化。

result_01.png image-20210608133922921 result_02.gif

2.3: JRadioButton(单选按钮)

单选框,一组的单选框,只能有一个被选中。

概述单选按钮,常用控件之一。

应用场景列:选择性别、婚姻状况等。

选择项之间是互斥的。总之是多种情况的一种,并且只能有一种。

效果图

result.gif

2.4: JCheckBox(复选框)

复选框,一组的复选框,可有多个被选中。

概述复选框,常用控件之一。

选择项之间是可累加的。比如根据爱好,列出爱好的细分项去让用户选择。

效果图

result.gif

2.5: JToggleButton(开关按钮)

特殊的,带有状态的按钮。

概述

开关按钮。JToggleButton 是 JRadioButton, JCheckBox 的父类,主要实现一个按钮的两种状态(选中 和 未选中)来实现开关切换的效果。

效果图

result_01.gif

2.6: JTextField(单行文本框)

单行文本框,用来编辑单行的文本。

概述

Swing中使用 JTextField 类实现一个单行文本框,它允许用户输入单行的文本信息。

效果图

result.png

2.7: JPasswordField(密码框)

密码框,输入密码是采用特定字符占位展示。

概述

密码框。JPasswordField 继承自 JTextField,只是显示输入的内容时用特定的字符替换显示(例如 * 或 ●),用法和 JTextField 基本一致。

效果图

result.png

2.8: JTextArea(文本区域)

单行文本框,用来编辑多行的文本。

概述

文本区域。JTextArea 用来编辑多行的文本。JTextArea 除了允许多行编辑外,其他基本用法和 JTextField 基本一致。

效果图

result.png

2.9: JComboBox(下拉列表框)

下拉列表的特点是将多个选项折叠在一起,只显示最前面的或被选中的一个。

概述

下拉列表框。JComboBox以下列列表的形式展示多个选项,用户可以从下拉列表中选择一个值。

其中的选项内容由一个 ComboBoxModel 实例来维护。

如果设置JComboBox为可编辑状态,除了选择指定的选项值外,还允许用户自行输入值(自行输入的值索引为-1)

效果图

result.gif

2.10: JList(列表框)

列表框和下拉列表框的区别不至于外观展示,列表框是可以进行多选的。

概述

列表框。JList 以列表的形式展示多个选项,允许用户选择一个或多个选项。其中的选项内容由一个 ListModel 实例来维护。JList 不实现直接滚动,需要滚动显示,可以结合 JScrollPane 实现滚动效果。

效果图

result.gif

2.11: JProgressBar(进度条)

展示程序、任务的进度情况。是可以增加交互体验的组件之一。

概述

进度条,以可视化形式显示某些任务进度的组件。

进度条中心可显示进度百分比的文本表示形式。

当一个任务的进度长度未知时,可将进度条设置为不确定模式。不确定模式的进度条持续地显示动画来表示正进行的操作。当可以确定任务长度和进度量时,则可设置进度条的最大最小值,以及更新进度条的进度值,将其切换回确定模式。

效果图

result.gif

2.12: JSlider(滑块)

以图形方式在有界区间内通过移动滑块来选择值的组件。

概述

以图形方式在有界区间内通过移动滑块来选择值的组件。

滑块可以显示主刻度标记以及主刻度之间的次刻度标记。刻度标记之间的值的个数由 setMajorTickSpacing(int) 和 setMinorTickSpacing(int) 来控制。刻度标记的绘制由 setPaintTicks(boolean) 控制。

滑块也可以在固定时间间隔(或在任意位置)沿滑块刻度打印文本标签。标签的绘制由 setLabelTable(Dictionary) 和 setPaintLabels(boolean) 控制。

PS: 当滑块获得焦点后,按键盘上的 上下左右键 也可以滑动滑块。

效果图

result01.gif

3. 面板组件

在SWING里,面板就是容器,容器就是放置组件的。

3.1: JPanel(面板)

可以理解成HTML里面的DIV容器,JPanel也是用来置放控件的容器。这边的容器,只不过java swing叫面板

参考链接-CSDN

概述

JPanel 是在开发中使用频率非常高的一般轻量级面板容器组件。

​ JPanel 是一种中间层容器,它能容纳组件并将组件组合在一起,但它本身必须添加到其他容器中使用。

​ JPanel 类的构造方法如下:

  • JPanel():使用默认的布局管理器创建新面板,默认的布局管理器为 FlowLayout。
  • JPanel(LayoutManagerLayout layout):创建指定布局管理器的 JPanel 对象。

效果图

这个界面分别用到了三个Jpanel,来组成的登录界面。

  • 1和2:有标签和单行文本框组成,分别对应用户名和密码以及 他们对应的输入框。
  • 3:两个按钮组成,分别是登录和注册。
image-20210608145432647

3.2: JScrollPane(滚动面板)

当内容过多而展示控件又有限的时候就可以使用滚动面板。

参考链接-CSDN

概述

滚动面板。JScrollPane 支持水平和垂直滚动视图。文本区域、表格等需要显示较多数据而空间又有限时,通常使用 JScrollPane 进行包裹以实现滚动显示。

JScrollPane 内包含一个视口(ViewPort),表示 JScrollPane 的显示区域。视口内包含一个需要滚动显示的组件,称为视图。

效果图

result.png

3.3: JSplitPane(分隔面板)

把组件进行分隔,展示的一个容器。

参考链接-CSDN

概述

分隔面板。JSplitPane用于分隔两个(只能两个)组件,两个组件通过水平/垂直分隔条分别 左右 或 上下 显示,并且可以拖动分隔条调整两个组件显示区域的大小。

效果图

result.gif

3.4: JTabbedPane(选项卡面板)

顾名思义,就是选项卡。根据不同的选项,展示不同的面板组件。

参考链接-CSDN

概述

选项卡面板,它允许用户通过点击给定标题或图标的选项卡,在一组组件之间进行切换显示

效果图

result.gif

3.5: ==JLayeredPane(层级面板)?==

JLayeredPane为容器添加了深度,允许组件在需要时互相重叠。

概述

JLayeredPane将深度范围按 层 划分,在同一层内又对组件按位置进一步划分,将组件放入容器时需要指定组件所在的层,以及组件在该层内的 位置(position/index)。

层的编号越大越显示在前面;同层内位置编号越大越靠近底部(位置编号取值范围: [-1, n - 1],n 表示层内组件数量,其中 -1 表示最底,0 表示最顶)。

通过 setLayer(Component c, int layer) 可设置组件所在的层数。

同一层内的组件,可通过调用 moveToFront(Component)、moveToBack(Component) 和 setPosition(int) 调整层内的位置。

PS: 添加到 JLayeredPane 内的组件需要明确指定组在位置和宽高,否则不显示(类似绝对布局)。

效果图

result.png

4.其他组件

此章节的笔记内容,可归纳理解为关于系统级别的组件。

关于JFrame容器放在这里,是因为其比较特殊。

4.1: JFrame(窗口)

JFrame 用来设计类似于 Windows 系统中窗口形式的界面。JFrame 是 Swing 组件的顶层容器,该类继承了 AWT 的 Frame 类,支持 Swing 体系结构的高级 GUI 属性。

参考链接-CSDN

概述

JFrame,窗口。JFrame 是一个可以独立显示的组件,一个窗口通常包含有标题、图标、操作按钮(关闭、最小化、最大化),还可以为窗口添加菜单栏、工具栏等。一个进程中可以创建多个窗口,并可在适当时候进行显示、隐藏 或 销毁。

效果图

result.gif

4.2.1:JOptionPane(标准对话框)

JavaSwing 内部已实现好的对话框,静态方法直接调用使用即可。

参考链接-CSDN

概述

JOptionPane是 JavaSwing 内部已实现好的,以静态方法的形式提供调用,能够快速方便的弹出要求用户提供值或向其发出通知的标准对话框。

效果图

result01.gif

4.2.2:JDialog(自定义对话框)

功能比JOptionPane更强大,可以自定义的对话框。

参考链接-CSDN

概述

使用 JDialog 类可以创建自定义有的对话框,或者调用 JOptionPane 中的多个静态方法快速创建各种标准的对话框。

对话框 JDialog 和 JFrame 都是继承自 java.awt.Window,用法与 JFrame 类似。

对话框分为 模态 和 非模态:

  • 模态: 弹出对话框后,对话框的父级窗口不可操作。
  • 非模态: 弹出对话框后,对话框的父级窗口可以正常操作。

对话框不能最小化。

效果图

result02.gif

4.3: JFileChooser(文件选择器)

操作文件的组件

概述

文件选取器。JFileChooser为用户选择文件提供了一种简单的机制,包括 打开文件保存文件

效果图

4.4: JColorChooser(颜色选择器)

颜色选择器,常用来改变背景颜色。

概述

颜色选取器。JColorChooser提供一个用于允许用户操作和选择颜色的控制器对话框。

使用方法非常简单,就调用 JColorChooser 的一个静态方法便可:

效果图

4.5: JMenuBar(菜单栏)

菜单栏,系统主界面最上方的选择项。

概述

菜单栏。菜单栏组件添加到 JFrame 窗口后,在窗口的内容显示区域的顶部出现。实现一个菜单栏主要涉及三种类:

  • (1)JMenuBar:表示一个菜单栏。

  • (2)JMenu:表示菜单栏上的一个一级菜单。

  • (3)子菜单,表示一级菜单下的一个子菜单项;三者分别表示 :

    • JMenuItem:普通的子菜单
    • JCheckBoxMenuItem:带复选框的子菜单
    • JRadioButtonMenuItem:带单选按钮的子菜单

PS: JMenu 继承自 JMenuItem,所以一个 JMenu 也可以当做是一个二级子菜单项,通过 JMenu 和 JMenuItem 之间的嵌套,可实现多级子菜单效果。

4.6: JToolBar(工具栏)

用来显示常用控件的容器组件。

概述

对于大多数的外观,用户可以将工具栏拖到其父容器四“边”中的一边,并支持在单独的窗口中浮动显示。为了正确执行拖动,建议将 JToolBar 实例添加到容器四“边”中的一边(其中容器的布局管理器为 BorderLayout),并且不在其他四“边”中添加任何子级。

效果图

4.7: JPopupMenu(弹出菜单)

弹出式菜单、右键菜单。

概述

弹出菜单是一个可弹出并显示一系列选项的悬浮小窗口。在实际应用中通常通过单击鼠标右键触发弹出显示。

JPopupMenu 的使用和 JMenuBar 类似。

效果图

4.8: JTable(表格)【重要】

JTable 是用来显示和编辑常规二维单元表。==内容较多,也比较常用;此块为重点!==

概述

表格组件和其他普通组件一样,需要添加到中间容器中才能显示,添加表格到容器中有两种方式:

  • 1.添加到普通的中间容器中(如上面代码实例所示的添加到JPanel),此时添加的jTable只是表格的行内容,表头(jTable.getTableHeader())需要额外单独添加。此添加方式适合表格行数确定,数据量较小,能一次性显示完的表格;
  • 2.添加到JScrollPane滚动容器中,此添加方式不需要额外添加表头,jTable添加到jScrollPane中后,表头自动添加到滚动容器的顶部,并支持行内容的滚动(滚动行内容时,表头会始终在顶部显示)。

效果图

普通表格 带滚动的表格 表格模型 主要看代码

4.9: JTree(树)

树,将分层数据显示为树状轮廓的组件。

概述

一颗树由若干节点,通过层级关系组成,一个节点由TreeNode实例来表示,节点在树中的位置(路径)由TreePath实例来表示(定位)。

创建树时,首先要创建一个根节点,然后创建第二层节点添加到根节点,继续创建节点添加到其父节点,最终形成由根节点所引领的一棵树,再由 JTree 数组件显示出来。所有拥有子节点的节点可以自由展开或折叠子节点。

TreeNode 是一个接口,创建节点对象时,通常使用已实现该接口的的 DefaultMutableTreeNode

效果图

4.10: JInternalFrame(内部窗口)

显示在程序界面内的窗口,跟正常窗口一样。

概述

JInternalFrame 支持在 JFrame 窗口内部显示一个完整的子窗口,并提供了许多本机窗体功能的轻量级对象,包括拖动、关闭、变成图标、调整大小、标题显示和支持菜单栏等。

在实际使用中,通常将 JInternalFrame 添加到 JDesktopPane 中,由其来维护和显示 JInternalFrame。

JInternalFrame 的实例创建后,其具体使用方法和 JFrame 类似。

效果图

相关特性

1: 组件的位置和尺寸【重要】

此节内容涉及到组件的布局,大小等。内容重要程度,十分重要

概述

效果图

2: 组件边框(Border)

组件美化设置。

参考链接-CSDN

概述

效果图

空文件

简介

swing学习的笔记记录。笔记手册 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/Alin_1998/java-swing-gui.git
git@gitee.com:Alin_1998/java-swing-gui.git
Alin_1998
java-swing-gui
java-swing-gui
master

搜索帮助