第八章 Java Swing与事件处理 事件触发机制和事件处理机制是围绕AT进行的,而 Swing 是在AWT的基础上构建起来的,所以Swng组件也使用了 AWT的事件管理机
第八章 Java Swing与事件处理 事件触发机制和事件处理机制是围绕AWT进行的,而Swing 是在AWT的基础上构建起来的,所以Swing组件也使用了 AWT的事件管理机
本章要点 ■理解布局管理器的作用 掌握F。 olwLayout、 grildLayout、 Border Layout使用 ■了解组件之间的关系 ■掌握常用组件的使用 ■了解事件处理的原理 ■掌握事件的注册、监听和处理 ■了解WT事件继承层次 ■理解高级事件和低级事件的概念 ■掌握窗口事件、鼠标事件、键盘事件的应用
本章要点: ◼理解布局管理器的作用 ◼掌握FolwLayout、GrildLayout、BorderLayout使用 ◼了解组件之间的关系 ◼掌握常用组件的使用 ◼了解事件处理的原理 ◼掌握事件的注册、监听和处理 ◼了解WT事件继承层次 ◼理解高级事件和低级事件的概念 ◼掌握窗口事件、鼠标事件、键盘事件的应用
81布局管理介绍 为了使 Swing用户界面能在跨平台平台上表现一致,Java布 局管理器提供了一层抽象,自动把用户界面映射到所有的窗 口系统。当把Java的GUI组件添加到容器时,它们由容器的 布局管理器来安排位置 对于 JFrame窗口,程序可以将组件添加到它们的内容面板 中。 JFrame的内容面板是一个容器类型的类对象,可以通 过 getcontentPaneo返回该内容面板,内容面板的默认布局 是 BorderLayout布局,容器可以使用 setlayout(布局对象) 方法来设置自己的布局
为了使Swing用户界面能在跨平台平台上表现一致,Java布 局管理器提供了一层抽象,自动把用户界面映射到所有的窗 口系统。当把Java的GUI组件添加到容器时,它们由容器的 布局管理器来安排位置。 对于JFrame窗口,程序可以将组件添加到它们的内容面板 中。JFrame的内容面板是一个容器类型的类对象,可以通 过getContentPane()返回该内容面板,内容面板的默认布局 是BorderLayout布局,容器可以使用setLayout(布局对象) 方法来设置自己的布局。 8.1 布局管理介绍
81布局管理介绍 在程序中安排组件的位置和大小时,应注意: 容器中布局管理器负责各组件的大小和位置,用户无 法在这种情况下设置组件的这些属性,如试图调用 Location(, setsize(, setbounds()等。 ■如果用户确实需要自己设置组件的大小和位置,则应 取消该容器的布局管理器,方法为: setlayout(null) 但用户必须使用 setlocation(), setsize(, setBoundso等 方法为组件设置大小和位置,不过程序将系统相关
在程序中安排组件的位置和大小时,应注意: ▪ 容器中布局管理器负责各组件的大小和位置,用户无 法在这种情况下设置组件的这些属性,如试图调用 setLocation(), setSize(), setBounds()等。 ▪ 如果用户确实需要自己设置组件的大小和位置,则应 取消该容器的布局管理器,方法为: setLayout(null) 但用户必须使用setLocation(), setSize(), setBounds()等 方法为组件设置大小和位置,不过程序将系统相关。 8.1 布局管理介绍
81布局管理介绍 在容器中所有组件的布局都由布局管理器来控制,每个 容器,如 Panel、 Windows或 Frame都有各自缺省的布局管理 器,程序员也可以在程序中指定一个新的布局管理器。 Java. awt类包中包含五种布局管理器: Flowlayout: Panel和 Applet的缺省布局管理器 Borderlayout: Window、 Dialog和 Frame的缺省布局管理器 a gridlayout Cardlayout GridBagLayout
8.1 布局管理介绍 在容器中所有组件的布局都由布局管理器来控制,每个 容器,如Panel、Windows或Frame都有各自缺省的布局管理 器,程序员也可以在程序中指定一个新的布局管理器。 java.awt类包中包含五种布局管理器: ▪ FlowLayout:Panel和Applet的缺省布局管理器 ▪ BorderLayout:Window、Dialog和Frame的缺省布局管理器 ▪ GridLayout ▪ CardLayout ▪ GridBagLayout
81布局管理介绍 FlowLayout low layout布局方式是将组件一排一排地依次放置,它自 动调用组件的 get PreferredSizeo方法,使用组件的最佳尺寸来 显示组件。当容器被重新设置大小后,则布局也会随之发生改 变:各组件的大小不变,但相对位置会发生变化。 Flow layout类有三种构造方法: public FlowLayouto 使用缺省居中对齐方式,组件间的水平和竖直间距为缺省值 5个象素。 public FlowLayout(int alignment 使用指定的对齐方式( FlowLayout. LEFT, FlowLayout. RIGHT, FlowLayout Center),水平和竖直间距为缺省值5象素。 public Flow Layout(int alignment, int horizontal Gap, int verticalGap) 使用指定的对齐方式,水平和竖直间距也为指定值
8.1 布局管理介绍——FlowLayout FlowLayout布局方式是将组件一排一排地依次放置,它自 动调用组件的getPreferredSize()方法,使用组件的最佳尺寸来 显示组件。当容器被重新设置大小后,则布局也会随之发生改 变:各组件的大小不变,但相对位置会发生变化。 FlowLayout类有三种构造方法: public FlowLayout() 使用缺省居中对齐方式,组件间的水平和竖直间距为缺省值 5个象素。 public FlowLayout(int alignment) 使用指定的对齐方式(FlowLayout.LEFT,FlowLayout.RIGHT, FlowLayout.Center),水平和竖直间距为缺省值5象素。 public FlowLayout(int alignment, int horizontalGap, int verticalGap) 使用指定的对齐方式,水平和竖直间距也为指定值
import java. awt. i import javax. swing. i class frame flow extends jframe FrameFlow (string name { super(name); Container contenetPane=this getContentPane; Flow Layout flow Layout=new Flow Layout flow Layout. setAlignment( FlowLayout LEFT)//设置布局的对齐方式 flowLayout. setHgap(4) /设置组件的水平间距 flow Layout. setVgap(6); //设置组件的垂直间距 contenetPane. setlayout( flow Layout);//设置容器的布局为 flow Layout for(int i=1;i<=10;i++) contenetPane ado( new JButton("按钮"+i)//把按钮加入容器 contenetPane validated //设置容器有效 setBounds(50, 50, 100, 100); setsize(300, 300); setvisible( true); /设置组件可见 setDefaultCloseOperation( JFrame DISPOSE_ON_ CLOSE)//关闭容口, Example 1.java
import java.awt.*; import javax.swing.*; class FrameFlow extends JFrame { FrameFlow(String name) { super(name); Container contenetPane=this.getContentPane(); FlowLayout flowLayout=new FlowLayout(); flowLayout.setAlignment(FlowLayout.LEFT); //设置布局的对齐方式 flowLayout.setHgap(4); //设置组件的水平间距 flowLayout.setVgap(6); //设置组件的垂直间距 contenetPane.setLayout(flowLayout); //设置容器的布局为flowLayout for(int i=1;i<=10;i++) { contenetPane.add(new JButton("按钮 "+i)); //把按钮加入容器 } contenetPane.validate(); //设置容器有效 setBounds(50,50,100,100); setSize(300,300); setVisible(true); //设置组件可见 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //关闭容口, Example8_1 .java
//并结束程序的运行 } public class Example8_1 public static void main(String args) Frameflow frame= new ramelOw(" FlowLayout布局窗口") } Examples 1.iava
//并结束程序的运行 } } public class Example8_1 { public static void main(String args[]) { FrameFlow frame=new FrameFlow("FlowLayout布局窗口"); } } Example8_1 .java
81布局管理介绍 BorderLayout Border layout布局方式提供了更复杂的布局控制方法,它 包括5个区域: North, South, East. West和 Center,其方位依据 上北下南左西右东。当容器的尺寸发生变化时,各组件的相 对位置不变,但中间部分组件的尺寸会发生变化,南北组件 的高度不变,东西组件的宽度不变。 Borderlayout类有二种构造方法: public border layout 各组件间的水平和竖直间距为缺省值0个象素 North public BorderLayout(int horizontalGap, int vertical Gap) 各组件间的水平和竖直间距为指定值。 Center South
8.1 布局管理介绍——BorderLayout BorderLayout布局方式提供了更复杂的布局控制方法,它 包括5个区域:North, South, East, West和Center,其方位依据 上北下南左西右东。当容器的尺寸发生变化时,各组件的相 对位置不变,但中间部分组件的尺寸会发生变化,南北组件 的高度不变,东西组件的宽度不变。 BorderLayout类有二种构造方法: public BorderLayout() 各组件间的水平和竖直间距为缺省值0个象素。 public BorderLayout(int horizontalGap, int verticalGap) 各组件间的水平和竖直间距为指定值。 North South West East Center
81布局管理介绍 BorderLayout 如果容器使用了 Border layout布局方式,则用ad(O方法往容 器中添加组件时必须指明添加的位置,否则组件将无法正确显 示(不同的布局管理器,向容器中添加组件的方法也不同)。 add(West", new button( West) ad( north”, new button(Norh”) add(new Button( West), border layout. SOUTH) 若没有指明放置位置,则表明为默认的“ Center方位。 每个区域只能添加一个组件,若添加多个,则只能显示一个。 如果想在一个区域添加多个组件,则必须先在该区域放一个 Pane容器,再将多个组件放在该Pane容器中 若每个区域或若干个区域没有放置组件,东西南北区域将不 会有预留,而中间区域将置空
如果容器使用了BorderLayout布局方式,则用add()方法往容 器中添加组件时必须指明添加的位置,否则组件将无法正确显 示(不同的布局管理器,向容器中添加组件的方法也不同)。 add(“West”, new Button(“West”)); add(“North”, new Button(“North”)); add(new Button(“West”), BorderLayout.SOUTH); 若没有指明放置位置,则表明为默认的“Center”方位。 每个区域只能添加一个组件,若添加多个,则只能显示一个。 如果想在一个区域添加多个组件,则必须先在该区域放一个 Panel容器,再将多个组件放在该Panel容器中。 若每个区域或若干个区域没有放置组件,东西南北区域将不 会有预留,而中间区域将置空。 8.1 布局管理介绍——BorderLayout