GUI 事件处理机制
1、在某个组件上执行某个操作,会自动调用某一段代码的执行
2、事件源: 事件发生的场所,通常指组件
3、事件:用户在事件源上进行的操作,比如点击某个组件,所有事件都被封装到Event类中
4、事件监听器:对事件进行反映的机器
5、注册监听器:把某一个事件监听器通过某一个事件绑定到事件源上
代码具体使用步骤:
1、创建事件源组件对象
2、创建事件监听器类(自定义类),但要继承XxxListener接口并重写所有的抽象类方法
也可以继承XxxAdapter父类
3、创建事件监听器对象(内部类或匿名内部类),把事件监听器对象通过事件源的addXxxListener的方法完成注册监听
Summer:可以发现在整个代码实现过程,事件都没出现,因为事件是人机交互时,用户执行的一个动作,而程序员只需要编写反映整个动作的代码即可。
Swing 常用事件处理
1、窗体事件 WindowEvent
内容: 窗体的打开、关闭、激活、停用等
窗体事件的处理:
1、自定义类 重写WindowListener接口或者继承WindowAdapter的父类创建事件监听器(用来处理事件的)
2、然后把事件监听器添加到事件发生的那个事件源中,这里调用addWindowListener();
2、鼠标事件 MouseEvent
内容:鼠标按下、松开、单击等
MouseEvent类中定义了许多常量来识别鼠标动作
BUTTON1 鼠标左击
BUTTON2 鼠标滚轮点击
BUTTON3 鼠标右击
3、键盘事件 KeyEvent
内容:键盘按下与释放
4、动作事件 ActionEvent
内容:只是一个动作的抽象,比如点击按钮、双击列表中的选项、选择菜单项、在文本框中输入回车等
attention:同一个动作可能触发几个事件
Swing概述
1、顶级容器:JApplet,JFrame和JDialog
2、中间容器(设置布局):JPanel
3、组件:填充数据、元素以及人机交互的组件
4、事件处理:相应用户的交互
Swing顶级容器
JFrame
方法列举: 设置窗体对象关闭,设置窗体尺寸大小,设置窗体可见等
JDiolag
分类:
1、模态对话框:一定要处理完这个窗口后才能与其他窗口交互
2、非模态对话框:允许用户在处理对话框时与其他窗口交互
与JFrame的区别:不能放大、缩小
具体方法请参见帮助文档
组件
summer:组件必须放在容器中,组件在容器中的位置与尺寸由布局管理器决定
1、BorderLayout 边界布局管理器
组件分为5个区域:
页头:PAGE_START
页尾:PAGE_END
行首:LINE_START
行尾:LINE_END
中部:CENTER
这也是BorderLayout中的五个常量
使用:
JFrame f=new JFrame ();
f.add(Component c,Object position)
如果添加组件时不指定添加到哪个区域,则默认添加到CENTER区域中
添加指定组件与位置时,也可以使用NORTH、SOUTH、EAST、WEST、CENTER
2、BoxLayout 箱式布局管理器
3、CardLayout 卡片布局管理器
4、FlowLayout 流式布局管理器
添加的组件会以从左到右的顺序放置,当到达容器的边界时,会自动将组件放到下一行的开始位置
左对齐:LEFT
右对齐:RIGHT
居中对齐:CENTER
tip:在构造FlowLayout时还可以分别设置组件之间的水平与垂直间距
5、GridBagLayout 网格包布局管理器
6、GridLayout 网格布局管理器
tip:
1、可以使用纵横线将容器分成n行m列大小相等的网格,每个网格可以放一个组件
2、添加顺序:从左至右、从上至下
构造方法:
1、GridLayout(); //只有一行,每个组件占一列
2、GridLayout(int row,int col); //指定行数与列数
3、GridLayout(int row,int col,int hgap,int vgap); //指定行数与列数,窗格之间水平与垂直方向的间距
7、GroupLayout 分组布局管理器
8、SpringLayout 弹性布局管理器
Swing 常用组件
1、JPane 面板组件
介绍:无边框、不能被移动、放大、缩小或者关闭的面板
默认布局管理器是FlowLayout
2、JScrollPane 带滚动条的组件
介绍: 只能添加一个组件
如果要添加多个组件,那么要将这多个组件加到一个组件中,再将这个组件加到JScrollPane中
构造方法:
1、JScrollPane(); //构造的JScrollPane与普通JPane 无差别
2、JScrollPane(Component view); //创建一个显示指定组件的JScrollPane面板,只要组件的内容超过面板的大小就会显示水平与垂直滚动条
3、JScrollPane(Component view,int vsbPolicy,int hsbPolicy); //创建一个显示指定容器,并具有指定滚动条策略的JScrollPane
设置面板滚动策略的方法
1、void setHorizontalBarPolicy(int policy); //指定水平滚动策略,即水平滚动条何时显示在滚动面板上
2、void seVeticalBarPolicy(int policy); //指定垂直滚动策略,即垂直滚动条何时显示在滚动面板上
3、void setViewPortView(Component view); //设置在滚动面板显示的组件
tip:滚动策略方法取值可以使用ScrollPaneConstants接口中声明了多个常量属性来进行设置
常量属性:
1、VERTICAL_SCROLLBAR_AS_NEEDED
HORIZONTAL_SCROLLBAR_AS_NEEDED
当填充的组件视图超过客户端窗口大小时,自动显示水平和竖直滚动条
2、VERTICAL_SCROLLBAR_ALWAYS
HORIZONTAL_SCROLLBAR_ALWAYS
无论填充的组件视图大小,始终显示水平和竖直滚动条
3、VERTICAL_SCROLLBAR_NEVER
HORIZONTAL_SCROLLBAR_NEVER
无论填充的组件视图大小,始终不显示水平与竖直滚动条
4、JTextField 文本框
JTextArea 文本组件
tip: 它们都有一个共同父类JTextComponent ——抽象类
方法:
1、String getText(); //以字符串形式返回文本组件中所有的文本内容
2、String getSelectedText(); //以字符串形式返回文本组件中选定的文本内容
3、void selectAll(); //设置文本组件中选中的所有内容
4、void setEditable(); //设置文本内容可编辑与不可编辑状态
5、void setText(String text); // 设置文本组件的内容
6、void reolaceSelection(String Text); //用另外一个文本去替换当前选定内容
文本组件
JTextField 文本框
tip: 只能接收单行文本的输入
说明: JTextField 有一个子类 JPasswordField ,表示一个单行输入密码框
单行密码输入框 是通过显示指定的回显字符作为占位符的
新创建的密码框默认的回显字符为“ * ”
JTextArea 文本域
tip:能够接收多行文本的输入,而且可以再构造时设定区域的行数与列数
JLabel 标签组件
tip: 能够显示文本、图像、还可以设置标签内容的垂直与水平对齐方式
按钮组件
JButton JCheckBox JRadioButton
它们都是抽象类AbstractButton类的直接或间接子类
JCheckButton 复选框组件
tip: 有选中与未选中的状态,通常复选框会有多个,然用户可以选择一个或多个,就像数学题里的多选题
方法: 构造方法
setText(String text); //设置复选框文本信息
setSelected(boolen b); //设置复选框的状态 设置复选框是否选中
isSelected(); //判断复选框是否被选中
JRadioButton 单选按钮组件
tip:单选按钮组件只能选择一个,就像数学中的单选题
那么怎么实现这些按钮达到单选的功能呢?
JRadioButton 按钮之间的互斥,要使用ButtonGroup类来实现 。将多个JRadioButton按钮添加到同一个单选按钮组中就能实现JRadioButton按钮的单选功能
JComboBox 下拉框组件
tip: 它将所有选项折叠在一起,默认显示的是第一个添加的选项
说明:
1、当用户单击下拉框时,会出现下拉式的选择列表,用户可以从中选择其中一项并显示
2、JcomboBox下拉框组件分为可编辑和不可编辑两种形式。 对于不可编辑的下拉框,用户只能选择现有的选项列表 , 对于可编辑的下拉框,用户还可以自己输入新的内容,但是不会添加到下拉框的选项列表中
菜单组件——下拉式菜单
JMenuBar(菜单栏)、JMenu(菜单)、JMenuItem(菜单项)
JMenuBar 表示一个水平菜单栏,它用来管理一组菜单,不参与用户的交互
tip:
1、菜单栏可以放在容器的任何位置,但通常情况下会使用顶级容器的setJMenuBar()方法将它放置在顶级容器的顶部
2、创建菜单栏时,只要使用new关键字创建JMenubar对象即可
3、创建菜单栏对象后,可以调用它的add(JMenu c)方法为其添加JMenu菜单
JMenu 菜单
tip:
1、用来管理菜单项
2、菜单可以是单一层次结构,也可以是多层次结构
3、一般的构造方法:JMenu(String text) ,参数text指表示菜单上的内容,比如 “文件”
JMenuItem 菜单项
tip:
1、一般构造方法JMenuItem(String text) 为菜单项指定文本内容
2、JMenuItem继承自AbstractButton类,因此可以把菜单项当做一个按钮
3、如果使用无参构造方法创建了一个菜单项,则可以调用从AbstractButton类中继承的setText(String text)方法和setIcon()方法为其设置文本与图标
JPopupMenu 弹出式菜单
具体例子:在Windows桌面单击鼠标右键会出现一个菜单
tip:
1、JPopupMenu 同样可以通过调用add()方法添加JMenuItem,但JPopupMenu是不可见的
,如果想显示弹出式菜单,必须调用show(Component invoker,int x,int y),参数invoker表示JPopupMenu菜单显示的位置的参考组件,x与y表示invoker组件坐标空间中的一个坐标,显示的是JPopupMenu的左上角坐标
一.绘图的相关Java类介绍:Swing自带双缓冲技术
1、JFrame类,是Java图形用户界面(GUI)工具包swing中的存放组件的容器。相当于相框。
2、JPanel类,是Java图形用户界面(GUI)工具包swing中的面板容器类。相当于画板。(用这两者自带具有双缓冲)
3、Graphics类,是Java用于绘图和显示格式化文字的工具。相当于画笔。
二.绘图步骤
1、创建相框JFrame对象jFrame。
2、创建画板JPanel对象jPanel,重写paint()方法。
3、在paint()方法中,用画笔Graphics对象graphics的drawXxx()进行绘图。别忘了要调用super.paint(g)。
4、将画板jPanel嵌入相框中jFrame.add(jPanel)。
5、设置相框为可见状态jFrame.setVisible(true)和相框大小jFrame.setSize(宽度, 高度)。
Swing绘图
java.awt中专门提供了一个Graphics类,用来绘制各种图形,使用Graphics类的方法就可以在组件上完成绘制图形
void setColor(Color c); //将此图形上下文的当前颜色设置为指定颜色
void setFont(Font f); //将此图形上下文的字体设置为指定字体
void drawLine(int x1,int y1,int x2,int y2); //以(x1,y1)与(x2,y2)为端点绘制一条线段
void drawRect(int x,int y,int width,int height); //绘制指定矩形的边框
void drawOval(int x,int y,int width,int height); //绘制椭圆边框
void fillRect(int x,int y,int width,int height); //用当前颜色填充指定矩形
void fillOval(int x,int y,int width,int height); //用当前颜色填充外接指定矩形的椭圆
void drawString(String str,int x,int y); //使用此图形上下文的当前字体和颜色绘制指定的文本str,最左侧字符左下角位于(x,y)坐标