布局管理器,就是组件在容器内的的花式摆放。
根据规则,从左往右(或从右往左)的去顺序布局,容器撑满后自动换行。
流式布局管理器。按水平方向依次排列放置组件,排满一行,换下一行继续排列。排列方向(左到右 或 右到左)取决于容器的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
把容器列分成矩形网格。组件放入网格后,组件的宽高自动撑满网格。
网格布局管理器。它以矩形网格形式对容器的组件进行布置,把容器按行列分成大小相等的矩形网格,一个网格中放置一个组件,组件宽高自动撑满网格。
以行数和总数优先: 通过构造方法或 setRows 和 setColumns 方法将行数和列数都设置为非零值时,指定的列数将被忽略。列数通过指定的行数和布局中的组件总数来确定。因此,例如,如果指定了三行和两列,在布局中添加了九个组件,则它们将显示为三行三列。仅当将行数设置为零时,指定列数才对布局有效。
组件的大小撑满了网格,所以组件大小等于网格大小。
网格袋布局管理器。它不要求组件的大小相同便可以将组件垂直、水平或沿它们的基线对齐。每个 GridBagLayout 对象维持一个动态的矩形单元格(动态计算出单个单元格的大小),每个组件占用一个或多个的单元格,该单元格被称为 显示区域。每个组件显示区域按 从左到右,从上到下,依次排列。
看代码效果得知,就是对网格袋布局的封装。
箱式布局管理器。它把若干组件按水平或垂直方向依次排列放置。Swing 提供了一个实现了 BoxLayout 的容器组件Box。使用 Box 提供的静态方法,可快速创建水平/垂直箱容器(Box),以及填充组件之间空隙的不可见组件。用水平箱和垂直箱的组合嵌套可实现类似于 GridBagLayout 的效果,但没那么复杂。
分组布局管理器。它将组建按层次分组,以决定它们在 Container 中的位置。GroupLayout 主要供生成器使用(生成 并行组 和 串行组)。分组由GroupLayout.Group类的实例来完成,每个组可以包含任意数量的元素(Group、Component 或 Gap)。GroupLayout支持两种组:
- 串行组 (sequential group):按顺序沿指定方向(水平/垂直)逐个放置元素。
- 并行组 (parallel group):沿指定方向(水平/垂直)并行排列元素,能够以四种不同方式对齐其子元素。 PS: 串行和并行根据不同的方向(水平/垂直方向),元素的排列方式也不同(从上到下 或 从左到右)。
将容器内的每个组件当成一张卡片,轮播展示组件。
卡片布局管理器。它将容器中的每个组件看作一张卡片,一次只能看到一张卡片,容器则充当卡片的堆栈,默认显示第一张卡片。
卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件。
按钮名称在变化,因为组件一直在像卡片切换并显示。
把容器划分成五大区域,每个区域只能放置一个组件。
每个区域只能放置一个组件
每个区域只能放置一个组件
每个区域只能放置一个组件
边界布局管理器。它把 Container 按方位分为 5 个区域(东、西、南、北、中),每个区域放置一个组件。
每个区域只能添加一个组件,如果添加多个,则只显示一个。如果想在一个区域添加多个组件, 则必须在该区域放一个Panel,然后把多个组件放到面板里面。如果每个区域或者若干区域没有放置组件,东西南北区域不会预留位置,而中间区域位置将置空。
有图有真相
弹性布局管理器。使用该布局的容器内的每一个组件或容器都对应着一个约束,通过该约束定义组件或容器四条边的坐标位置 来实现对组件的布局。该布局主要涉及三个类: SpringLayout、SpringLayout.Constraints、Spring,分别表示 布局管理器、约束、坐标距离。
通过设置组件的坐标,将其固定到容器中的某个位置。
null,绝对布局。绝对布局没有特定一个布局管理器类来表示,给容器的布局管理器设置为 null,就表示使用绝对布局,即通过设置组件的坐标和宽高来布置组件。
绝对布局需要明确指定每一个组件的坐标和宽高,否则不显示。
对于使用其他布局时给组件设置坐标和宽高,一般会遵循以下两点:
- 使用其他布局时,如果在窗口显示之后,再添加新组件,则该组件也会被当做绝对布局对待(即需要手动指定坐标和宽高);
- 使用其他布局时,如果在窗口显示之后,修改之前添加的组件的坐标和宽高,则该组件也会被当做绝对布局对待(即此时修改坐标和宽高会生效)。
这几个按钮,位置都是通过坐标写死的。局限性很大,一旦电脑分辨率不一样;展示的效果会出乎意料。
基本组件是组成程序的元数据之一,比如按钮、标签、文本框、密码框等。是程序界面必要的,不可或缺的。
非交互式组件,主要用来展示内容。
标签是一种可以包含文本和图片的非交互组件,其文本可以是单行文本,也可以是 HTML 文本。
常用的交互式组件之一。一般情况下,按钮数量在整个程序中是最多的。
按钮,常用控件之一。通过对按钮的操作,可触发相对应的事件。应用场景广,花样多
按钮的样式可以千变万化。
单选框,一组的单选框,只能有一个被选中。
应用场景列:选择性别、婚姻状况等。
选择项之间是互斥的。总之是多种情况的一种,并且只能有一种。
复选框,一组的复选框,可有多个被选中。
选择项之间是可累加的。比如根据爱好,列出爱好的细分项去让用户选择。
特殊的,带有状态的按钮。
开关按钮。JToggleButton 是 JRadioButton, JCheckBox 的父类,主要实现一个按钮的两种状态(选中 和 未选中)来实现开关切换的效果。
单行文本框,用来编辑单行的文本。
Swing中使用 JTextField 类实现一个单行文本框,它允许用户输入单行的文本信息。
密码框,输入密码是采用特定字符占位展示。
密码框。JPasswordField 继承自 JTextField,只是显示输入的内容时用特定的字符替换显示(例如 * 或 ●),用法和 JTextField 基本一致。
单行文本框,用来编辑多行的文本。
文本区域。JTextArea 用来编辑多行的文本。JTextArea 除了允许多行编辑外,其他基本用法和 JTextField 基本一致。
下拉列表的特点是将多个选项折叠在一起,只显示最前面的或被选中的一个。
下拉列表框。JComboBox以下列列表的形式展示多个选项,用户可以从下拉列表中选择一个值。
其中的选项内容由一个 ComboBoxModel 实例来维护。
如果设置JComboBox为可编辑状态,除了选择指定的选项值外,还允许用户自行输入值(自行输入的值索引为-1)
列表框和下拉列表框的区别不至于外观展示,列表框是可以进行多选的。
列表框。JList 以列表的形式展示多个选项,允许用户选择一个或多个选项。其中的选项内容由一个 ListModel 实例来维护。JList 不实现直接滚动,需要滚动显示,可以结合 JScrollPane 实现滚动效果。
展示程序、任务的进度情况。是可以增加交互体验的组件之一。
进度条,以可视化形式显示某些任务进度的组件。
进度条中心可显示进度百分比的文本表示形式。
当一个任务的进度长度未知时,可将进度条设置为不确定模式。不确定模式的进度条持续地显示动画来表示正进行的操作。当可以确定任务长度和进度量时,则可设置进度条的最大最小值,以及更新进度条的进度值,将其切换回确定模式。
以图形方式在有界区间内通过移动滑块来选择值的组件。
以图形方式在有界区间内通过移动滑块来选择值的组件。
滑块可以显示主刻度标记以及主刻度之间的次刻度标记。刻度标记之间的值的个数由 setMajorTickSpacing(int) 和 setMinorTickSpacing(int) 来控制。刻度标记的绘制由 setPaintTicks(boolean) 控制。
滑块也可以在固定时间间隔(或在任意位置)沿滑块刻度打印文本标签。标签的绘制由 setLabelTable(Dictionary) 和 setPaintLabels(boolean) 控制。
PS: 当滑块获得焦点后,按键盘上的 上下左右键 也可以滑动滑块。
在SWING里,面板就是容器,容器就是放置组件的。
可以理解成HTML里面的DIV容器,JPanel也是用来置放控件的容器。这边的容器,只不过java swing叫面板
JPanel 是在开发中使用频率非常高的一般轻量级面板容器组件。
JPanel 是一种中间层容器,它能容纳组件并将组件组合在一起,但它本身必须添加到其他容器中使用。
JPanel 类的构造方法如下:
- JPanel():使用默认的布局管理器创建新面板,默认的布局管理器为 FlowLayout。
- JPanel(LayoutManagerLayout layout):创建指定布局管理器的 JPanel 对象。
这个界面分别用到了三个Jpanel,来组成的登录界面。
- 1和2:有标签和单行文本框组成,分别对应用户名和密码以及 他们对应的输入框。
- 3:两个按钮组成,分别是登录和注册。
当内容过多而展示控件又有限的时候就可以使用滚动面板。
滚动面板。JScrollPane 支持水平和垂直滚动视图。文本区域、表格等需要显示较多数据而空间又有限时,通常使用 JScrollPane 进行包裹以实现滚动显示。
JScrollPane 内包含一个视口(ViewPort),表示 JScrollPane 的显示区域。视口内包含一个需要滚动显示的组件,称为视图。
把组件进行分隔,展示的一个容器。
分隔面板。JSplitPane用于分隔两个(只能两个)组件,两个组件通过水平/垂直分隔条分别 左右 或 上下 显示,并且可以拖动分隔条调整两个组件显示区域的大小。
顾名思义,就是选项卡。根据不同的选项,展示不同的面板组件。
选项卡面板,它允许用户通过点击给定标题或图标的选项卡,在一组组件之间进行切换显示。
JLayeredPane为容器添加了深度,允许组件在需要时互相重叠。
JLayeredPane将深度范围按 层 划分,在同一层内又对组件按位置进一步划分,将组件放入容器时需要指定组件所在的层,以及组件在该层内的 位置(position/index)。
层的编号越大越显示在前面;同层内位置编号越大越靠近底部(位置编号取值范围: [-1, n - 1],n 表示层内组件数量,其中 -1 表示最底,0 表示最顶)。
通过 setLayer(Component c, int layer) 可设置组件所在的层数。
同一层内的组件,可通过调用 moveToFront(Component)、moveToBack(Component) 和 setPosition(int) 调整层内的位置。
PS: 添加到 JLayeredPane 内的组件需要明确指定组在位置和宽高,否则不显示(类似绝对布局)。
此章节的笔记内容,可归纳理解为关于系统级别的组件。
关于JFrame容器放在这里,是因为其比较特殊。
JFrame 用来设计类似于 Windows 系统中窗口形式的界面。JFrame 是 Swing 组件的顶层容器,该类继承了 AWT 的 Frame 类,支持 Swing 体系结构的高级 GUI 属性。
JFrame
,窗口。JFrame 是一个可以独立显示的组件,一个窗口通常包含有标题、图标、操作按钮(关闭、最小化、最大化),还可以为窗口添加菜单栏、工具栏等。一个进程中可以创建多个窗口,并可在适当时候进行显示、隐藏 或 销毁。
JavaSwing 内部已实现好的对话框,静态方法直接调用使用即可。
JOptionPane
是 JavaSwing 内部已实现好的,以静态方法的形式提供调用,能够快速方便的弹出要求用户提供值或向其发出通知的标准对话框。
功能比JOptionPane更强大,可以自定义的对话框。
使用 JDialog 类可以创建自定义有的对话框,或者调用 JOptionPane 中的多个静态方法快速创建各种标准的对话框。
对话框 JDialog 和 JFrame 都是继承自 java.awt.Window,用法与 JFrame 类似。
对话框分为 模态 和 非模态:
- 模态: 弹出对话框后,对话框的父级窗口不可操作。
- 非模态: 弹出对话框后,对话框的父级窗口可以正常操作。
对话框不能最小化。
操作文件的组件
文件选取器。JFileChooser为用户选择文件提供了一种简单的机制,包括 打开文件 和 保存文件。
颜色选择器,常用来改变背景颜色。
颜色选取器。JColorChooser提供一个用于允许用户操作和选择颜色的控制器对话框。
使用方法非常简单,就调用 JColorChooser 的一个静态方法便可:
菜单栏,系统主界面最上方的选择项。
菜单栏。菜单栏组件添加到 JFrame 窗口后,在窗口的内容显示区域的顶部出现。实现一个菜单栏主要涉及三种类:
(1)JMenuBar:表示一个菜单栏。
(2)JMenu:表示菜单栏上的一个一级菜单。
(3)子菜单,表示一级菜单下的一个子菜单项;三者分别表示 :
- JMenuItem:普通的子菜单
- JCheckBoxMenuItem:带复选框的子菜单
- JRadioButtonMenuItem:带单选按钮的子菜单
PS: JMenu 继承自 JMenuItem,所以一个 JMenu 也可以当做是一个二级子菜单项,通过 JMenu 和 JMenuItem 之间的嵌套,可实现多级子菜单效果。
用来显示常用控件的容器组件。
对于大多数的外观,用户可以将工具栏拖到其父容器四“边”中的一边,并支持在单独的窗口中浮动显示。为了正确执行拖动,建议将 JToolBar 实例添加到容器四“边”中的一边(其中容器的布局管理器为 BorderLayout),并且不在其他四“边”中添加任何子级。
弹出式菜单、右键菜单。
弹出菜单是一个可弹出并显示一系列选项的悬浮小窗口。在实际应用中通常通过单击鼠标右键触发弹出显示。
JPopupMenu 的使用和 JMenuBar 类似。
JTable 是用来显示和编辑常规二维单元表。==内容较多,也比较常用;此块为重点!==
表格组件和其他普通组件一样,需要添加到中间容器中才能显示,添加表格到容器中有两种方式:
- 1.添加到普通的中间容器中(如上面代码实例所示的添加到JPanel),此时添加的jTable只是表格的行内容,表头(jTable.getTableHeader())需要额外单独添加。此添加方式适合表格行数确定,数据量较小,能一次性显示完的表格;
- 2.添加到JScrollPane滚动容器中,此添加方式不需要额外添加表头,jTable添加到jScrollPane中后,表头自动添加到滚动容器的顶部,并支持行内容的滚动(滚动行内容时,表头会始终在顶部显示)。
普通表格 | 带滚动的表格 | 表格模型 | 主要看代码 |
---|---|---|---|
树,将分层数据显示为树状轮廓的组件。
一颗树由若干节点,通过层级关系组成,一个节点由TreeNode实例来表示,节点在树中的位置(路径)由TreePath实例来表示(定位)。
创建树时,首先要创建一个根节点,然后创建第二层节点添加到根节点,继续创建节点添加到其父节点,最终形成由根节点所引领的一棵树,再由 JTree 数组件显示出来。所有拥有子节点的节点可以自由展开或折叠子节点。
TreeNode 是一个接口,创建节点对象时,通常使用已实现该接口的的 DefaultMutableTreeNode 类
显示在程序界面内的窗口,跟正常窗口一样。
JInternalFrame 支持在 JFrame 窗口内部显示一个完整的子窗口,并提供了许多本机窗体功能的轻量级对象,包括拖动、关闭、变成图标、调整大小、标题显示和支持菜单栏等。
在实际使用中,通常将 JInternalFrame 添加到 JDesktopPane 中,由其来维护和显示 JInternalFrame。
JInternalFrame 的实例创建后,其具体使用方法和 JFrame 类似。
此节内容涉及到组件的布局,大小等。内容重要程度,十分重要
略
略
组件美化设置。
略
略
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。