# java-swing-gui **Repository Path**: Leeeeeeroy/java-swing-gui ## Basic Information - **Project Name**: java-swing-gui - **Description**: swing学习的笔记记录。笔记手册 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-06-19 - **Last Updated**: 2021-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1:布局管理器 > **布局管理器,就是组件在容器内的的花式摆放。** ## 1.1:FlowLayou (流式布局) > **根据规则,从左往右(或从右往左)的去顺序布局,容器撑满后自动换行。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/72814541) ### 概述 > ​ 流式布局管理器。按水平方向依次排列放置组件,排满一行,换下一行继续排列。排列方向(左到右 或 右到左)取决于容器的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](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609001507.png) ## 1.2:GridLayout (网格布局) > **把容器列分成矩形网格。组件放入网格后,组件的宽高自动撑满网格。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/72814548) ### 概述 > ​ 网格布局管理器。它以**矩形网格形式**对容器的组件进行布置,把容器按行列分成**大小相等**的矩形网格,一个网格中放置一个组件,**组件宽高自动撑满网格**。 > > **以行数和总数优先**: 通过构造方法或 setRows 和 setColumns 方法将行数和列数都设置为非零值时,指定的列数将被忽略。列数通过指定的行数和布局中的组件总数来确定。因此,例如,如果指定了三行和两列,在布局中添加了九个组件,则它们将显示为三行三列。仅当将行数设置为零时,指定列数才对布局有效。 ### 效果图 > 组件的大小撑满了网格,所以组件大小等于网格大小。 ![result.png](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609002547.png) ## ==1.3:GridBagLayout(网格袋布局)?== > - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/72814552) ### 概述 > ​ 网格袋布局管理器。它不要求组件的大小相同便可以将组件垂直、水平或沿它们的基线对齐。每个 GridBagLayout 对象维持一个动态的矩形单元格(动态计算出单个单元格的大小),每个组件占用一个或多个的单元格,该单元格被称为 显示区域。每个组件显示区域按 从左到右,从上到下,依次排列。 ### 效果图 ![result.png](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609002528.png) ### 效果图 ## ==1.4:BoxLayout(箱式布局)?== > 看代码效果得知,就是对网格袋布局的封装。 - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/72814557) ### 概述 > ​ 箱式布局管理器。它把若干组件按水平或垂直方向依次排列放置。Swing 提供了一个实现了 BoxLayout 的容器组件Box。使用 Box 提供的静态方法,可快速创建水平/垂直箱容器(Box),以及填充组件之间空隙的不可见组件。用水平箱和垂直箱的组合嵌套可实现类似于 GridBagLayout 的效果,但没那么复杂。 ### 效果图 ![result.png](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609002616.png) ## ==1.5:GroupLayout(分组布局)?== - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/72862660) ### 概述 > 分组布局管理器。它将组建按层次分组,以决定它们在 Container 中的位置。GroupLayout 主要供生成器使用(生成 并行组 和 串行组)。分组由**GroupLayout.Group**类的实例来完成,每个组可以包含任意数量的元素(Group、Component 或 Gap)。GroupLayout支持两种组: > > - **串行组** (sequential group):按顺序沿指定方向(水平/垂直)逐个放置元素。 > - **并行组** (parallel group):沿指定方向(水平/垂直)并行排列元素,能够以四种不同方式对齐其子元素。 > PS: 串行和并行根据不同的方向(水平/垂直方向),元素的排列方式也不同(从上到下 或 从左到右)。 ### 效果图 ![result.png](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609002634.png) ## 1.6: CardLayout(卡片布局) > **将容器内的每个组件当成一张卡片,轮播展示组件。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/72862688) ### 概述 > ​ 卡片布局管理器。它将容器中的每个组件看作一张卡片,一次只能看到一张卡片,**容器则充当卡片的堆栈**,默认显示第一张卡片。 > > 卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件。 ### 效果图 > 按钮名称在变化,因为组件一直在像卡片切换并显示。 ![20170604234916596](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20170604234916596.gif) ## 1.7: BorderLayout(边界布局) > **把容器划分成五大区域,每个区域只能放置一个组件。** > > 每个区域只能放置一个组件 > > 每个区域只能放置一个组件 > > 每个区域只能放置一个组件 - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/72862707) ### 概述 > ​ 边界布局管理器。它把 Container 按方位分为 5 个区域(东、西、南、北、中),每个区域放置一个组件。 > > > 每个区域只能添加一个组件,如果添加多个,则只显示一个。如果想在一个区域添加多个组件, 则必须在该区域放一个Panel,然后把多个组件放到面板里面。如果每个区域或者若干区域没有放置组件,东西南北区域不会预留位置,而中间区域位置将置空。 ### 效果图 > 有图有真相 ![result.png](https://img-blog.csdn.net/20170604235436098?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlldGFuc2hlbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ## ==1.8: SpringLayout(弹性布局)?== - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/72862722) ### 概述 > 弹性布局管理器。使用该布局的容器内的**每一个组件或容器都对应着一个约束**,通过该约束定义组件或容器四条边的坐标位置 来实现对组件的布局。该布局主要涉及三个类: **SpringLayout**、**SpringLayout.Constraints**、**Spring**,分别表示 布局管理器、约束、坐标距离。 ### 效果图 ![result.png](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003553.png) ## 1.9:null(绝对布局) > **通过设置组件的坐标,将其固定到容器中的某个位置。** ### 概述 > null,绝对布局。绝对布局没有特定一个布局管理器类来表示,给容器的布局管理器设置为 null,就表示使用绝对布局,即通过设置组件的坐标和宽高来布置组件。 > > 绝对布局需要明确指定每一个组件的坐标和宽高,否则不显示。 > > 对于使用其他布局时给组件设置坐标和宽高,一般会遵循以下两点: > > - 使用其他布局时,如果在窗口显示之后,再添加新组件,则该组件也会被当做绝对布局对待(即需要手动指定坐标和宽高); > - 使用其他布局时,如果在窗口显示之后,修改之前添加的组件的坐标和宽高,则该组件也会被当做绝对布局对待(即此时修改坐标和宽高会生效)。 ### 效果图 > 这几个按钮,位置都是通过坐标写死的。局限性很大,一旦电脑分辨率不一样;展示的效果会出乎意料。 ![result.png](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609002158.png) # 2:基本组件 > **基本组件是组成程序的元数据之一,比如按钮、标签、文本框、密码框等。是程序界面必要的,不可或缺的。** ## 2.1: JLabel(标签) > **非交互式组件,主要用来展示内容。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74362076) ### 概述 > 标签是一种可以**包含文本和图片**的非交互组件,其文本可以是单行文本,也可以是 HTML 文本。 ### 效果图 ![result.png](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609002207.png) ## 2.2: JButton(按钮) > **常用的交互式组件之一。一般情况下,按钮数量在整个程序中是最多的。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74363221) ### 概述 > 按钮,常用控件之一。通过对按钮的操作,可触发相对应的事件。应用场景广,花样多 ### 效果图 > 按钮的样式可以千变万化。 | ![result_01.png](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003332.png) | image-20210608133922921 | ![result_02.gif](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003333.png) | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ## 2.3: JRadioButton(单选按钮) > **单选框,一组的单选框,只能有一个被选中。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74363379) ### 概述单选按钮,常用控件之一。 > 应用场景列:选择性别、婚姻状况等。 > > 选择项之间是互斥的。总之是多种情况的一种,并且只能有一种。 ### 效果图 ![result.gif](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/b81d11e131d1dfb4de60edacf3829375.gif) ## 2.4: JCheckBox(复选框) > **复选框,一组的复选框,可有多个被选中。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74363460) ### 概述复选框,常用控件之一。 > 选择项之间是可累加的。比如根据爱好,列出爱好的细分项去让用户选择。 ### 效果图 ![result.gif](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003334.png) ## 2.5: JToggleButton(开关按钮) > **特殊的,带有状态的按钮。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74363501/) ### 概述 > 开关按钮。JToggleButton 是 JRadioButton, JCheckBox 的父类,主要实现一个按钮的两种状态(选中 和 未选中)来实现开关切换的效果。 ### 效果图 ![result_01.gif](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003335.png) ## 2.6: JTextField(单行文本框) > **单行文本框,用来编辑单行的文本。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74363582) ### 概述 > Swing中使用 JTextField 类实现一个单行文本框,它允许用户输入**单行**的文本信息。 ### 效果图 ![result.png](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003336.png) ## 2.7: JPasswordField(密码框) > **密码框,输入密码是采用特定字符占位展示。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74363621) ### 概述 > 密码框。JPasswordField 继承自 JTextField,只是显示输入的内容时用特定的字符替换显示(例如 * 或 ●),用法和 JTextField 基本一致。 ### 效果图 ![result.png](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003337.png) ## 2.8: JTextArea(文本区域) > **单行文本框,用来编辑多行的文本。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74363663) ### 概述 > 文本区域。JTextArea 用来编辑多行的文本。JTextArea 除了允许多行编辑外,其他基本用法和 JTextField 基本一致。 ### 效果图 ![result.png](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003338.png) ## 2.9: JComboBox(下拉列表框) > **下拉列表的特点是将多个选项折叠在一起,只显示最前面的或被选中的一个。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74363699) ### 概述 > 下拉列表框。JComboBox以下列列表的形式展示多个选项,用户可以从下拉列表中选择一个值。 > > 其中的选项内容由一个 ComboBoxModel 实例来维护。 > > 如果设置JComboBox为可编辑状态,除了选择指定的选项值外,还允许用户自行输入值(自行输入的值索引为-1) ### 效果图 ![result.gif](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003339.png) ## 2.10: JList(列表框) > **列表框和下拉列表框的区别不至于外观展示,列表框是可以进行多选的。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74363719) ### 概述 > 列表框。JList 以列表的形式展示多个选项,允许用户选择一个或多个选项。其中的选项内容由一个 ListModel 实例来维护。JList 不实现直接滚动,需要滚动显示,可以结合 JScrollPane 实现滚动效果。 ### 效果图 ![result.gif](C:\Users\chenlin\Pictures\Typora\20170705002602355) ## 2.11: JProgressBar(进度条) > **展示程序、任务的进度情况。是可以增加交互体验的组件之一。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74363751) ### 概述 > 进度条,以可视化形式显示某些任务进度的组件。 > > 进度条中心可显示进度百分比的文本表示形式。 > > 当一个任务的进度长度未知时,可将进度条设置为不确定模式。不确定模式的进度条持续地显示动画来表示正进行的操作。当可以确定任务长度和进度量时,则可设置进度条的最大最小值,以及更新进度条的进度值,将其切换回确定模式。 ### 效果图 ![result.gif](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003340.png) ## 2.12: JSlider(滑块) > **以图形方式在有界区间内通过移动滑块来选择值的组件。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74363768) ### 概述 > 以图形方式在有界区间内通过移动滑块来选择值的组件。 > > 滑块可以显示主刻度标记以及主刻度之间的次刻度标记。刻度标记之间的值的个数由 setMajorTickSpacing(int) 和 setMinorTickSpacing(int) 来控制。刻度标记的绘制由 setPaintTicks(boolean) 控制。 > > 滑块也可以在固定时间间隔(或在任意位置)沿滑块刻度打印文本标签。标签的绘制由 setLabelTable(Dictionary) 和 setPaintLabels(boolean) 控制。 > > PS: 当滑块获得焦点后,按键盘上的 上下左右键 也可以滑动滑块。 ### 效果图 ![result01.gif](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003341.png) # 3. 面板组件 > 在SWING里,面板就是容器,容器就是放置组件的。 ## 3.1: JPanel(面板) > **可以理解成HTML里面的DIV容器,JPanel也是用来置放控件的容器。这边的容器,只不过java swing叫面板** [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74366470) ### 概述 > **JPanel 是在开发中使用频率非常高的一般轻量级面板容器组件。** > > ​ JPanel 是一种中间层容器,它能容纳组件并将组件组合在一起,但它本身必须添加到其他容器中使用。 > > ​ JPanel 类的构造方法如下: > > - JPanel():使用默认的布局管理器创建新面板,默认的布局管理器为 FlowLayout。 > - JPanel(LayoutManagerLayout layout):创建指定布局管理器的 JPanel 对象。 ### 效果图 > 这个界面分别用到了三个**Jpanel**,来组成的登录界面。 > > - 1和2:有标签和单行文本框组成,分别对应用户名和密码以及 他们对应的输入框。 > - 3:两个按钮组成,分别是登录和注册。 image-20210608145432647 ## 3.2: JScrollPane(滚动面板) > **当内容过多而展示控件又有限的时候就可以使用滚动面板。** [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74366495) ### 概述 > 滚动面板。JScrollPane 支持水平和垂直滚动视图。**文本区域、表格等需要显示较多数据而空间又有限时**,通常使用 JScrollPane 进行包裹以实现滚动显示。 > > JScrollPane 内包含一个视口(ViewPort),表示 JScrollPane 的显示区域。视口内包含一个需要滚动显示的组件,称为视图。 ### 效果图 ![result.png](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003343.png) ## 3.3: JSplitPane(分隔面板) > **把组件进行分隔,展示的一个容器。** [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74366517) ### 概述 > ​ **分隔面板。JSplitPane用于分隔两个(只能两个)组件**,两个组件通过水平/垂直分隔条分别 左右 或 上下 显示,并且可以拖动分隔条调整两个组件显示区域的大小。 ### 效果图 ![result.gif](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003344.png) ## 3.4: JTabbedPane(选项卡面板) > **顾名思义,就是选项卡。根据不同的选项,展示不同的面板组件。** [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/74366541) ### 概述 > 选项卡面板,它允许用户通过点击给定标题或图标的选项卡,在一组组件之间进行**切换显示**。 ### 效果图 ![result.gif](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003345.png) ## 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](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003346.png) # 4.其他组件 > 此章节的笔记内容,可归纳理解为关于系统级别的组件。 > > 关于JFrame容器放在这里,是因为其比较特殊。 ## 4.1: JFrame(窗口) > **JFrame 用来设计类似于 Windows 系统中窗口形式的界面。JFrame 是 Swing 组件的顶层容器,该类继承了 AWT 的 Frame 类,支持 Swing 体系结构的高级 GUI 属性。** [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/75948927) ### 概述 >`JFrame`,窗口。JFrame 是一个可以独立显示的组件,一个窗口通常包含有标题、图标、操作按钮(关闭、最小化、最大化),还可以为窗口添加菜单栏、工具栏等。一个进程中可以创建多个窗口,并可在适当时候进行显示、隐藏 或 销毁。 ### 效果图 ![result.gif](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210609003347.png) ## 4.2.1:JOptionPane(标准对话框) > **JavaSwing 内部已实现好的对话框,静态方法直接调用使用即可。** [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/75948933) ### 概述 > `JOptionPane`是 JavaSwing 内部已实现好的,以静态方法的形式提供调用,能够快速方便的弹出要求用户提供值或向其发出通知的标准对话框。 ### 效果图 ![result01.gif](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/c9968daced9b36cb86c800a67ec83b4f.gif) ## 4.2.2:JDialog(自定义对话框) > **功能比JOptionPane更强大,可以自定义的对话框。** [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/75948933) ### 概述 > 使用 JDialog 类可以创建自定义有的对话框,或者调用 JOptionPane 中的多个静态方法快速创建各种标准的对话框。 > > 对话框 JDialog 和 JFrame 都是继承自 java.awt.Window,用法与 JFrame 类似。 > > 对话框分为 模态 和 非模态: > > - 模态: 弹出对话框后,对话框的父级窗口不可操作。 > - 非模态: 弹出对话框后,对话框的父级窗口可以正常操作。 > > 对话框不能最小化。 ### 效果图 ![result02.gif](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/9b157288d16e579e3a8d03ad21184d96.gif) ## 4.3: JFileChooser(文件选择器) > **操作文件的组件** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/75948936) ### 概述 > 文件选取器。JFileChooser为用户选择文件提供了一种简单的机制,包括 **打开文件** 和 **保存文件**。 ### 效果图 ![](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210615161306.gif) ## 4.4: JColorChooser(颜色选择器) > **颜色选择器,常用来改变背景颜色。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/75948941) ### 概述 > 颜色选取器。JColorChooser提供一个用于允许用户操作和选择颜色的控制器对话框。 > > 使用方法非常简单,就调用 JColorChooser 的一个静态方法便可: ### 效果图 ![](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210615102606.gif) ## 4.5: JMenuBar(菜单栏) > **菜单栏,系统主界面最上方的选择项。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/77151690) ### 概述 > 菜单栏。菜单栏组件添加到 JFrame 窗口后,在窗口的内容显示区域的顶部出现。实现一个菜单栏主要涉及三种类: > > - (1)JMenuBar:表示一个菜单栏。 > > - (2)JMenu:表示菜单栏上的一个一级菜单。 > > - (3)子菜单,表示一级菜单下的一个子菜单项;三者分别表示 : > - JMenuItem:**普通的子菜单** > - JCheckBoxMenuItem:**带复选框的子菜单** > - JRadioButtonMenuItem:**带单选按钮的子菜单** > > PS: JMenu 继承自 JMenuItem,所以一个 JMenu 也可以当做是一个二级子菜单项,通过 JMenu 和 JMenuItem 之间的嵌套,可实现多级子菜单效果。 ![](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210615161307.gif) ## 4.6: JToolBar(工具栏) > **用来显示常用控件的容器组件。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/77151743) ### 概述 > 对于大多数的外观,用户可以将工具栏拖到其父容器四“边”中的一边,并支持在单独的窗口中浮动显示。为了正确执行拖动,建议将 JToolBar 实例添加到容器四“边”中的一边(其中容器的布局管理器为 BorderLayout),并且不在其他四“边”中添加任何子级。 ### 效果图 ![](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210615161308.gif) ## 4.7: JPopupMenu(弹出菜单) > **弹出式菜单、右键菜单。** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/78079800) ### 概述 > 弹出菜单是一个可弹出并显示一系列选项的悬浮小窗口。在实际应用中通常通过单击鼠标右键触发弹出显示。 > > JPopupMenu 的使用和 JMenuBar 类似。 ### 效果图 ![](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210615113936.gif) ## 4.8: JTable(表格)【重要】 > **JTable 是用来显示和编辑常规二维单元表。==内容较多,也比较常用;此块为重点!==** ### 概述 > 表格组件和其他普通组件一样,需要添加到中间容器中才能显示,添加表格到容器中有两种方式: > > - 1.添加到普通的中间容器中(如上面代码实例所示的添加到JPanel),此时添加的jTable只是表格的行内容,表头(jTable.getTableHeader())需要额外单独添加。此添加方式适合表格行数确定,数据量较小,能一次性显示完的表格; > - 2.添加到JScrollPane滚动容器中,此添加方式不需要额外添加表头,jTable添加到jScrollPane中后,表头自动添加到滚动容器的顶部,并支持行内容的滚动(滚动行内容时,表头会始终在顶部显示)。 ### 效果图 | 普通表格 | 带滚动的表格 | 表格模型 | 主要看代码 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------- | | ![](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210615141454.png) | ![](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210615141450.png) | ![](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210615141448.png) |
| ## 4.9: JTree(树) >**树,将分层数据显示为树状轮廓的组件。** ### 概述 >一颗树由若干节点,通过层级关系组成,一个节点由TreeNode实例来表示,节点在树中的位置(路径)由TreePath实例来表示(定位)。 > >创建树时,首先要创建一个根节点,然后创建第二层节点添加到根节点,继续创建节点添加到其父节点,最终形成由根节点所引领的一棵树,再由 JTree 数组件显示出来。所有拥有子节点的节点可以自由展开或折叠子节点。 > >TreeNode 是一个接口,创建节点对象时,通常使用已实现该接口的的 **DefaultMutableTreeNode** 类 ### 效果图 ![](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210615152625.gif) ## 4.10: JInternalFrame(内部窗口) > **显示在程序界面内的窗口,跟正常窗口一样。** ### 概述 > JInternalFrame 支持在 JFrame 窗口内部显示一个完整的子窗口,并提供了许多本机窗体功能的轻量级对象,包括拖动、关闭、变成图标、调整大小、标题显示和支持菜单栏等。 > > 在实际使用中,通常将 JInternalFrame 添加到 JDesktopPane 中,由其来维护和显示 JInternalFrame。 > > JInternalFrame 的实例创建后,其具体使用方法和 JFrame 类似。 ### 效果图 ![](https://cloud-image-chenlin.oss-cn-chengdu.aliyuncs.com/cloud-image/20210615153051.gif) # 相关特性 ## 1: 组件的位置和尺寸【重要】 > **此节内容涉及到组件的布局,大小等。内容重要程度,十分重要** - [x] [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/78389183) ### 概述 > 略 ### 效果图 > 略 ## 2: 组件边框(Border) > **组件美化设置。** [参考链接-CSDN](https://blog.csdn.net/xietansheng/article/details/78389211) ### 概述 > 略 ### 效果图 > 略