SWing的概述
说明:
Swing组件的所有类都继承自Container类,然后根据GUI开发的功能扩展了2
个主要分支:容器分支(包括Window窗口和Panel面板)和组件分支。
容器分支就是为了实现图形用户界面窗口容器而设计的。
组件分支则是为了实现向容器中填充数据、元素以及人机交互组件等功能。
Swing组件类中,常用的顶级容器类包括有JApplet、JFrame和JDialog。
常用组件AbstractButton类及其子类是用来定义按钮常见行为的工具类。
JTextComponent类及其子类就是用来定义文本内容编辑区域的工具类
## SWing界面的顶级容器JFrame
* 在swing组件中,最常见的一个容器就是JFrame
* JFrame是一个独立存在的顶级容器【也叫窗口】,不能放置在其他容器中
* JFrame支持通用窗口所有的基本功能,例如窗口的最小化,最大化,设定窗口的大小等
* 常用的构造方法
- JFrame() 构造方法,创建一个没有窗口标题的窗口框架
- JFrmae(String) 构造方法,创建一个指定窗口标题的框架
顶级容器JDialog
* JDialog是Swing的另外一种顶级容器,通常用来表示对话框窗口
* JDialog对话框分为两种:模态对话框和非模态对框框
模态对话框:是指用户需要等到处理完对话框才能继续与其他的窗口交互
非模态对话框:是指允许用户在处理对话框的同时,与其他窗口进行交互
对话框是模态还是非模态,可以在创建JDialog对象时为构造方法传入参数来设置,也可以在创建Jdialog的对象 后调用它的setModal()方法来进行设置
* 常用构造方法
【JDialog(Frame owner)
构造方法,用来创建一个非模态的对话框,owner为对话框的所有者(顶级容器Frame)】
【JDialog(Frame owner,String title)
构造方法,创建一个具有指定标题的非模态对话框】
【JDialog (Frame owner, boolean modal)
创建一个有指定的无标题对话框,默认值为false(即得模式对话框)】
* JDialog创建的开窗口右上角没有放大和缩小的功能
Swing的面板组件
* swing组件中提供了一些面板组件(中间容器),这些面板不能单独存在,只能放置在顶级窗口容器中。
* 常见面板组件:
- JPanel
JPanel面板组件是一个无边框,不能被移动、放大、缩小、关闭的面板。它的默认布局管理器是FlowLayout
- JScrollPane
1. 是一个带有滚动条的面板容器,且只能添加一个组件
2. 想向JScrollPane面板中添加多个组件,应先将这个组件添加某个组件中,然后将这个组件添加到JScroll
* 面板组件——JScrollPane常用的构造方法
- JScrollPane()
创建一个空的JScrollPane面板
- JScrollPane(Component view)
创建一个显示指定的组件的JScrollPane面板,只要组件的内容超过视图打小就会显示水平和垂直滚动条
- JScrollPane(Component view,
int vsbPolicy,int hsbPolicy)
创建一个显示指定容器、并具有指定滚动条策略的JScrollPane。参数
vsbPolicy和hsbPolicy分别表示垂直滚动条策略和水平滚动条策略
* 面板组件——JScrollPane设置面板滚动策略的方法
- void setHorizontalBarPolicy(int policy)
指定水平滚动条策略,即水平滚动条何时显示在滚动面板上
- void setVerticalBarPolicy(int policy)
指定垂直滚动条策略,即垂直滚动条何时显示在滚动面板上
- void setViewportView(Component view)
设置在滚动面板显示的组件
*
1.VERTICAL_SCROLLBAR_AS_NEEDED
HORIZONTAL_SCROLLBAR_AS_NEEDED
当填充的组件视图超过客户端窗口大小时,自动显示水
平和竖直放行滚动条(JscrollPane组件的默认值)
2.VERTICAL_SCROLLBAR_ALWAYS
HORIZONTAL_SCROLLBAR_ALWAYS
无论填充的组件视图大小,始终显示水平和竖直 放行滚动条
3.VERTICAL_SCROLLBAR_NEVER
HORIZONTAL_SCROLLBAR_NEVER
无论填充的组件视图大小,始终不显示水平和 竖直放行滚动
文本组件
-
文本组件:文本组件用于接收用户输入的信息,包括本文框(JTextField)、文本域(JTextArea)等
注意:他们都有一个共同的父类JTextComponent,JTextComponent是一个抽象类 -
常用方法
- String getText() 返回文本组件中所有的文本内容
- String getSelectedText() 返回文本组件中选定的文本内容
- void selectAll() 在文本组件中选中所有内容
- void setEditable() 设置文本组件为可编辑或者不可编辑状态
- void setText(String text) 设置文本组件的内容 – void replaceSelection(String content) 用给定的内容替换当前选定的内容
-
文本组件——JTextArea
定义:JTextArea称为文本域,它能接收多行文本的输入,使用JTextArea构造方法创建时设定区域的行数、列数常用的构造方法
- JTextArea() 构造方法,创建一个空的文本域
- JTextArea(String text) 构造方法,创建显示指定初始字符串的文本域
- JTextArea(int rows,int columns) 构造方法,创建具有指定行和列的空的文本域
- JTextArea(String text,int rows,int columns) 构造方法,创建显示指定初始文本并指定了行列的文本域
标签组件
定义:标间组件主要用到的是JLabel,JLabel组件可以显示文本、图像、还可以设置标签内容的垂直和水平对齐方式
构造方法
- JLabel() 创建无图像并且其标题为空字符串的JLabel
- JLabel(Icon image) 创建具有指定图像的JLabel实例
- JLabel(Icon image, int horizontalAlignment) 创建具有指定图像和水平对齐方式的JLabel实例
- JLabel(String text) 创建具有指定文本的JLabel实例
- JLabel(String text, Icon icon,
int horizontalAlignment) 创建具有指定文本、图像和水平对齐方式的 JLabel 实例
- JLabel(String text, int horizontalAlignment) 创建具有指定文本和水平对齐方式的 JLabel 实例
按钮组件
-
在Swing中常见的按钮组件有JButton、JCheckBox、JRadioButton等,它
们都是抽象类AbstractButton类的直接或间接子类。 -
AbstractButton常用方法:
- Icon getIcon() 获取按钮的图标
- void setIcon(Icon icon) 设置按钮的图标
- String getText() 获取按钮的文本
- void setText(String text) 设置按钮的文本
- void setEnable(boolean b) 设置按钮是否可用
- boolean setSelected(boolean b) 设置按钮是否为选中状态
- boolean isSelected() 返回按钮的状态(true为选中,反之为未选中)
- 按钮组件——JCheckBox
说明:JCheckBox组件被称为复选框组件,它有选中和未选中两种状态,通常复
选框会有多个,用户可以选中其中一个或者多个。
常用构造方法- JCheckBox() 创建一个没有文本信息,初始状态未被选中的复选框
- JCheckBox(String text) 创建一个带有文本信息,初始状态未被选定的复选框
- JCheckBox(String text,boolean selected) 创建一个带有文本信息,并指定初始状态(选中/未选中)
的复选框
- 按钮组件——JRadioButton
#说明:JRadioButton组件被称为单选按钮组件,单选按钮只能选一个
#使用:
要JRadioButton按钮之间的互斥,需要使用ButtonGroup类。
ButtonGroup是一个不可见的单选按钮组。将多个JRadioButton按钮添加到同
一个单选按钮组中就能实现JRadioButton按钮的单选功能。
#常用构造方法- JRadioButton () 创建一个没有文本信息、初始状态未被选中的单选框
- JRadioButton (String text) 创建一个带有文本信息、初始状态未被选定的单选框
- JRadioButton (String text,boolean selected) 创建一个具有文本信息,并指定初始状态(选中/未选中)
的单选框
下拉框组件
9.下拉框组件
#定义: JComboBox组件被称为下拉框或者 组合框,它将所有选项折叠在一起,默认
显示的是第一个添加的选项。
当用户单击下拉框时,会出现下拉式的选择列表,用户可以从中选择其中一
项并显示。
#说明: JComboBox下拉框组件分为可编辑和不可编辑两种形式。
对于不可编辑的下拉框,用户只能选择现有的选项列表。
对于可编辑的下拉框,用户既可以选择现有的选项列表,也可以自己输入新
的内容。
注意:自己输入的内容只能作为当前项显示,并不会添加到下拉框的选项列表中。
#JComboBox常用构造方法:
- JComboBox() 创建一个没有可选项的下拉框
- JComboBox(Object[] items) 创建一个下拉框,将Object数组中的元素作为下拉框的下拉列表选项
- JComboBox(Vector items) 创建一个下拉框,将Vector集合中的元素作为下拉框的下拉列表选项
- void addItem(Object anObject) 为下拉框添加选项
- void insertItemAt(Object anObject,int index) 在指定的索引处插入选项
- Objct getItemAt(int index) 返回指定索引处选项,第一个选项的索引为0
- int getItemCount() 返回下拉框中选项的数目
- Object getSelectedItem() 返回当前所选项
- void removeAllItems() 删除下拉框中所有的选项
- void removeItem(Object object) 从下拉框中删除指定选项
- void removeItemAt(int index) 移除指定索引处的选项
- void setEditable(boolean aFlag) 设置下拉框的选项是否可编辑,aFlag为true则可编辑,反
之则不可编
菜单组件——下拉式菜单
-
说明:
计算机中很多文件的菜单都是下拉式的,如记事本的菜单。
在Swing中,创建下拉式菜单需要使用三个组件:JMenuBar(菜单栏)、
JMenu(菜单)和JMenuItem(菜单项) -
JMenuBar(菜单栏)
JMenuBar表示一个水平的菜单栏,它用来管理一组菜单,不参与同用户的交
互式操作。
菜单栏可以放在容器的任何位置,但通常情况下会使用顶级容器(如JFrame、
Jdialog)的setJMenuBar()方法将它放置在顶级容器的顶部。
创建菜单栏时,只需要使用new关键字创建JMenubar对象即可。
创建完菜单栏对象后,可以调用它的add(JMenu c)方法为其添加JMenu菜单。 -
JMenu(菜单)
JMenu表示一个菜单,它用来整合管理菜单项。
菜单可以是单一层次的结构,也可以是多层次的结构。
大多情况下,会使用JMenu(String text)构造函数创建JMenu菜单,参数text表
示菜单上的文本内容。JMenu(菜单)——常用方法
- JMenuItem add(JMenuItem menuItem) 将菜单项添加到菜单末尾,返回此菜单项
- void addSeparator() 将分隔符添加到菜单的末尾
- JMenuItem getItem(int pos) 返回指定索引处的菜单项,第一个菜单项的索引为0
- int getItemCount() 返回菜单上的项数,菜单项和分隔符都计算在内
- JMenuItem insert(JmenuItem menuItem,int pos) 在指定索引处插入菜单项
- void insertSeparator(int pos) 在指定索引处插入分隔符
- void remove(int pos) 从菜单中移除指定索引处的菜单项
- void remove(JMenuItem menuItem) 从菜单中移除指定的菜单项
- void removeAll() 从菜单中移除所有的菜单项
4.JMenuItem(菜单项)
JMenuItem表示一个菜单项,它是菜单系统中最基本的组件。
通常会使用JMenumItem(String text)这个构造方法为菜单项指定文本内容。
JMenuItem继承自AbstractButton类,因此可以把它看成是一个按钮。
如果使用无参的构造方法创建了一个菜单项,则可以调用从AbstractButton类
中继承的setText(String text)方法和setIcon()方法为其设置文本和图标。
菜单组件——弹出式菜单
- 说明:
例如在Windows桌面单击鼠标右键会出现一个菜单,这就是弹出式菜单。
在Swing组件中,弹出式菜单可以用JPopupMenu来实现。
使用:
JPopupMenu弹出式菜单同样通过调用add()方法添加JMenuItem菜单项,但
它默认是不可见的。
想要显示弹出式菜单,必须调用show(Component invoker,int x,int y)方法。参
数invoker表示JPopupMenu菜单显示位置的参考组件,x和y表示invoker组件
坐标空间中的一个坐标,显示的是JPopupMenu菜单的左上角坐标。
## 布局管理器
- 说明:Swing组件不能单独存在,必须放置于容器当中,而组件在容器中的位置
和尺寸是由布局管理器来决定的。
2.分类:
GridBagLayout(网格包布局管理器)
GridLayout(网格布局管理器)
GroupLayout(分组布局管理器)
SpringLayout(弹性布局管理器)
BorderLayout(边界布局管理器)
BoxLayout(箱式布局管理器)
CardLayout(卡片布局管理器)
FlowLayout(流式布局管理器
BorderLayout
- 说明:
BorderLayout(边界布局管理器)是一种较为复杂的布局方式,它将容器划
分为五个区域,分别是页头(PAGE_START)、页尾(PAGE_END)、行
首(LINE_START)、行尾(LINE_END)、中部(CENTER)。
组件可以被放置在这五个区域中的任意一个位置。
2.使用:
向BorderLayout布局管理器的容器中添加组件时,需要使用add(Component
comp,Object constraints)方法。
参数comp表示要添加的组件,constraints指定将组件添加到布局中的位置,
它是一个Object类型。
传参时可以使用BorderLayout类提供的5个常量设置组件位置,它们分别是
PAGE_START、PAGE_END、LINE_START、LINE_END和CENTER。
3.说明:
BorderLayout的好处就是可以限定各区域的边界,当用户改变容器窗口大小
时,各个组件的相对位置不变。
向BorderLayout的布局管理器添加组件时,如果不指定添加到哪个区域,则
默认添加到CENTER区域。
每个区域只能放置一个组件,如果向一个区域中添加多个组件时,后放入的
组件会覆盖先放入的组件。
FlowLayout
- 说明:
FlowLayout(流式布局管理器)是最简单的布局管理器。
在这种布局下,容器会将组件按照添加顺序从左向右放置,当到达容器的边
界时,会自动将组件放到下一行的开始位置。
这些组件可以按左对齐、居中对齐(默认方式)或右对齐的方式排列。
2.构造方法
- FlowLayout() 组件默认居中对齐,水平、垂直间距默认为5个单位
- FlowLayout(int align) 指定组件相对于容器的对齐方式,水平、垂直间距默认为5
个单位 - FlowLayout(int align,int hgap,int vgap) 指定组件的对齐方式和水平、垂直间距
说明:
参数align决定组件在每行中相对于容器边界的对齐方式,分别为左对齐、右
对齐、居中对齐。
对齐方式可以使用该类中提供的常量FlowLayout.LEFT、FlowLayout.RIGHT、
FlowLayout.CENTER表示。
参数hgap和参数vgap分别设定组件之间的水平和垂直间距,可以填入一个任
意数值。
GridLayout
- 说明:
GridLayout(网格布局管理器)使用纵横线将容器分成n行m列大小相等的网
格,每个网格中可以添加一个组件。
添加到容器中的组件会从左向右、从上向下依次填充到网格中。
与FlowLayout不同的是,放置在GridLayout布局管理器中的组件将自动占据
网格的整个区域
2.构造方法
- GridLayout() 默认只有一行,每个组件占一列
- GridLayout(int rows,int cols) 指定容器的行数和列数
- GridLayout(int rows,int cols,int hgap,int vgap) 指定容器的行数和列数以及组件之间的水平、垂直间距
说明:参数rows代表行数,cols代表列数,hgap和vgap规定窗格之间水平和垂
直方向的间距。
特点:组件的相对位置不随区域的缩放而改变,但组件的大小会随之改变,组件
始终占据网格的整个区域。
缺点:总是忽略组件的最佳大小,所有组件的宽高都相同。
事件处理机制
-
定义:Swing组件中的事件处理专门用于响应用户的操作,例如,响应用户的单
击鼠标、按下键盘等操作。 -
wing事件处理涉及的三类对象:
- 事件源(Event Source)
事件发生的场所,通常就是产生事件的组件,例如:窗口、按钮、菜单等。 - 事件对象(Event)
封装了GUI组件上发生的特定事件(通常就是用户的一次操作) - 监听器(Listener)
负责监听事件源上发生的事件,并对各种事件做出相应处理的对象(对象中包含事件
处理器)。
- 事件源(Event Source)
说明:事件源是一个组件,当用户进行一些操作时,如按下鼠标或者释放键盘等,
都会触发相应的事件,如果事件源注册了监听器,则触发的相应事件将会被处理。
- 1、创建事件源
除了一些常见的按钮、键盘等组件可以作为事件源外,包括JFrame窗口在内的顶级容器也可以作为事件源;
2、自定义事件监听器
根据要监听的事件源创建指定类型的监听器进行事件处理,该监听器是一个特殊的Java类,必须实现XxxListener接口(根据组件触发的动作进行区分,如WindowListener用于监听窗口事件,ActionListener用于监听动作事件);
3、为事件源注册监听器
使用addXxxListener()方法为指定事件源添加特定类型的监听器。当事件源上发生监听的事件后,就会触发绑定的事件监听器,然后由监听器中的方法进行相应处理
- Swing常用事件处理
-
主要事件分类
* 窗体事件(WindowEvent)
1.1 说明:
对窗体进行操作时,例如窗体的打开、关闭、激活、停用等,这些动作都属
于窗体事件。
Java中提供了一个WindowEvent类用于表示窗体事件。
使用:
首先需要定义一个实现了WindowListener接口的类作为窗体监听器;
然后通过addWindowListener()方法将窗体对象与窗体监听器进行绑定。* 鼠标事件(MouseEvent) 说明: 用户会经常使用鼠标来进行选择、切换界面等操作,这些操作被定义为鼠标
-
事件,其中包括鼠标按下、鼠标松开、鼠标单击等。
Java中提供了一个MouseEvent类用于表示鼠标事件。
几乎所有的组件都可以产生鼠标事件。
使用:
首先需要通过实现MouseListener接口定义监听器(也可以通过继承适配器
MouseAdapter类来实现);
然后调用addMouseListener()方法将监听器绑定到事件源对象。
注意:
MouseEvent类中定义了很多常量来识别鼠标动作。
MouseEvent.BUTTON1:用来判定鼠标左击事件;
MouseEvent.BUTTON3:用来判定鼠标右击事件;
MouseEvent.BUTTON2:用来判定鼠标滚轮点击事件;
* 键盘事件(KeyEvent)
说明:
键盘操作也是最常用的用户交互方式,例如键盘按下、释放等,这些操作被
定义为键盘事件。
Java中提供了一个KeyEvent类表示键盘事件。
使用:
处理键盘事件的监听器对象需要实现KeyListener接口或者继承KeyAdapter类;
然后调用addKeyListener()方法将监听器绑定到事件源对象。
* 动作事件(ActionEvent)
说明:
动作事件与前面三种事件有所不同,它不代表某类事件,只是表示一个动作
发生了。
例如,在关闭一个文件时,可以通过键盘关闭,也可以通过鼠标关闭。
在Java中,动作事件用ActionEvent 类表示。
使用:
处理动作事件的监听器对象需要实现ActionListener接口