Java图形界面编程

上传人:仙*** 文档编号:133426110 上传时间:2022-08-10 格式:PPT 页数:112 大小:868.50KB
返回 下载 相关 举报
Java图形界面编程_第1页
第1页 / 共112页
Java图形界面编程_第2页
第2页 / 共112页
Java图形界面编程_第3页
第3页 / 共112页
点击查看更多>>
资源描述
第四章 掌握掌握Java图形界面设计的基本原理;图形界面设计的基本原理;理解理解java.awt和和javax.swing软件包的类层次结软件包的类层次结构;构;掌握利用掌握利用Java的的GUI组件来创建按钮、标签、组件来创建按钮、标签、列表、面板等组件;列表、面板等组件;掌握掌握Java图形界面的事件模型;图形界面的事件模型;掌握利用掌握利用Java布局管理器来对布局管理器来对Java图形界面图形界面进行布局管理。进行布局管理。图形用户界面图形用户界面(GUI)可以通过键盘或鼠标来可以通过键盘或鼠标来响应用户的操作。响应用户的操作。抽象窗口工具包抽象窗口工具包(AWT)是一组是一组Java类,此组类,此组Java类允许创建图形用户界面类允许创建图形用户界面(GUI)。AWT提供用于创建生动而高效的提供用于创建生动而高效的GUI的各种的各种组件组件。ComponentButtonCheckboxContainerChoiceCanvasTextComponentLabelPanelWindowAppletFrameDialogTextAreaTextField 可以存放组件的区域,可以存放组件的区域,可在容器上进行可在容器上进行绘制和着色绘制和着色 java.awt包中的包中的Container类可直接或间接类可直接或间接派生出两个常用容器:派生出两个常用容器:框架(框架(Frame类)类)和面板(和面板(Panel类)。类)。框架是一个带有边框的独立的窗口。框架是一个带有边框的独立的窗口。面板是包含在窗口中的一个不带边框的面板是包含在窗口中的一个不带边框的区域。区域。框架是独立于框架是独立于Applet和浏览器的一个窗口。和浏览器的一个窗口。可以通过以下任一构造函数来创建:可以通过以下任一构造函数来创建:Frame():创建一个不含标题的标准窗口创建一个不含标题的标准窗口 Frame(String Title):创建一个含有标题的窗口,创建一个含有标题的窗口,这个标题是由参数这个标题是由参数title指定的。指定的。当一个当一个Frame窗口被创建以后,需要调用窗口被创建以后,需要调用setSize()方法来设置窗口的大小,并调用方法来设置窗口的大小,并调用setVisible()来显示窗口。来显示窗口。面板不是一个单独的窗口,它只是包含面板不是一个单独的窗口,它只是包含在窗口中的一个区域。在窗口中的一个区域。面板是可以将许多组件组合起来的一种面板是可以将许多组件组合起来的一种容器。容器。最简单的创建面板的方式就是通过面板最简单的创建面板的方式就是通过面板的构造函数的构造函数 Panel()Panel()来进行。来进行。必须将面板添加到窗体中。必须将面板添加到窗体中。import java.awt.*;class PanelTest extends Panel public static void main(String args)PanelTest p=new PanelTest();Frame f=new Frame(正在测试面板!正在测试面板!);f.add(p);f.setSize(300,200);f.setVisible(true);使用使用GUIGUI组件必组件必须须导入导入该包该包将面板添加将面板添加到到框架窗体中框架窗体中 组件指可以放置在用户界面上的任何东西组件指可以放置在用户界面上的任何东西,可以将组件设置为可见或重新调整其大小。可以将组件设置为可见或重新调整其大小。AWT支持的组件:标签、文本域、文本区、支持的组件:标签、文本域、文本区、按钮、复选框、选择框等。按钮、复选框、选择框等。高级组件包括滚动条、滚动窗格和对话框。高级组件包括滚动条、滚动窗格和对话框。向窗口加入一个组件:首先生成所需组件的向窗口加入一个组件:首先生成所需组件的实例,然后调用实例,然后调用add()方法,此方法是在方法,此方法是在Container类中定义的。类中定义的。标标签签文本域文本域复选框复选框单选按钮单选按钮文本区文本区按钮按钮 可以通过以下任一构造函数来创建:可以通过以下任一构造函数来创建:Label():新建一个空标签新建一个空标签 Label(String labeltext):新建一个包含给定文本新建一个包含给定文本的标签的标签 Label(String labeltext,int alignment):新建一个包新建一个包含给定对齐方式的标签,对齐方式可以为含给定对齐方式的标签,对齐方式可以为 Label.LEFT、Label.RIGHT 或或 Label.CENTERv通常用来指明项目的用途通常用来指明项目的用途v标签不可以被用户编辑标签不可以被用户编辑 可以通过以下任一构造函数来创建:可以通过以下任一构造函数来创建:-TextField():新建一个文本新建一个文本域域 -TextField(int columns):新建一个包含给定新建一个包含给定列数的文本列数的文本域域 -TextField(String s):新建一个包含给定字符新建一个包含给定字符串的文本串的文本域域 -TextField(String s,int columns):新建一个包新建一个包含给定字符串和列数的文本含给定字符串和列数的文本域域 v一种用来输入文本的一种用来输入文本的GUI组件组件v只能接受一行输入只能接受一行输入import java.awt.*;class TextLabelDemo extends Frame Label lblName=new Label(“名称名称:”);TextField txtName=new TextField(20);public TextLabelDemo(String title)super(title);setLayout(new FlowLayout();add(lblName);add(txtName);public static void main(String args)TextLabelDemo t=new TextLabelDemo(正在测试组件!正在测试组件!);t.setSize(300,200);t.show();新建一个标签新建一个标签新建一个文本新建一个文本域域添加到窗口添加到窗口 可以通过以下构造函数来创建:可以通过以下构造函数来创建:-TextArea():新建一个新建一个TextArea-TextArea(int rows,int cols):新建一个包含给新建一个包含给定行数和列数的定行数和列数的TextArea-TextArea(String text,int rows,int cols):新建一新建一个包含给定字符串、行数和列数的个包含给定字符串、行数和列数的TextAreav要接受输入多行文本时使用要接受输入多行文本时使用v可以包括滚动条可以包括滚动条.TextArea txtComment=new TextArea();add(txtComment);.可以使用以下任一构造函数来创建按钮:可以使用以下任一构造函数来创建按钮:-Button():新建一个空的按钮新建一个空的按钮-Button(String text):新建一个包含给定字符串新建一个包含给定字符串的按钮的按钮v按钮是任何按钮是任何GUI都都不可或缺的组件不可或缺的组件v用来捕捉用户操作的最为简便的用来捕捉用户操作的最为简便的方式方式.Button btnOk=new Button(确定确定!);Button btnCancel=new Button(取消取消!);add(btnOk);add(btnCancel);.可以使用以下任一构造函数来创建复选框:可以使用以下任一构造函数来创建复选框:-Checkbox():创建一个空的复选框,且未被选中创建一个空的复选框,且未被选中 -Checkbox(String text):创建一个用给定字符串创建一个用给定字符串作为标签的复选框,且未被选中作为标签的复选框,且未被选中 -Checkbox(String text,Boolean on):创建一个标签创建一个标签由参数由参数text指定的复选框,允许通过参数指定的复选框,允许通过参数on设定设定复选框的初始状态。复选框的初始状态。用于多选项的用户输入,用户用于多选项的用户输入,用户可以通过单击复选框来选定或可以通过单击复选框来选定或取消选定某选项。取消选定某选项。可以通过复选框组生成一系列互斥的复选可以通过复选框组生成一系列互斥的复选框框,实现单选按钮功能。实现单选按钮功能。在一组单选按钮中只能选择一个按钮。在一组单选按钮中只能选择一个按钮。首先创建一个首先创建一个 CheckboxGroup 对象。对象。CheckboxGroup cg=new CheckboxGroup();然后再创建各单选按钮。然后再创建各单选按钮。Checkbox male=Checkbox(男男,cg,true);Checkbox female=Checkbox(女女,cg,false);import java.awt.*;class Qualification extends Frame Checkbox t1=new Checkbox(Visual Basic);Checkbox t2=new Checkbox(Visual C+);Checkbox t3=new Checkbox(Java);CheckboxGroup cg=new CheckboxGroup();Checkbox r1=new Checkbox(专科专科,cg,false);Checkbox r2=new Checkbox(本科本科,cg,false);Checkbox r3=new Checkbox(硕士硕士,cg,false);Checkbox r4=new Checkbox(博士博士,cg,false);Label lb1=new Label(您的学历为:您的学历为:);Label lb2=new Label(您精通的语言为:您精通的语言为:);新建复选新建复选框框新建一个复新建一个复选框组选框组添加添加单选按单选按钮钮 public Qualification(String s)super(s);setLayout(new GridLayout(10,1);add(lb1);add(r1);add(r2);add(r3);add(r4);add(lb2);add(t1);add(t2);add(t3);public static void main(String args)Qualification q=new Qualification(学识!学识!);q.setSize(400,250);q.show();将单选按钮添将单选按钮添加到窗体加到窗体将复选框添加到窗体将复选框添加到窗体 用用Choice类可以创建一个选择框类可以创建一个选择框 Choice moviestars=new Choice();通过通过 addItem()方法可以添加项目方法可以添加项目moviestars.addItem(安东尼奥安东尼奥.班德拉斯班德拉斯);moviestars.addItem(莱昂纳多莱昂纳多.迪卡普尼奥迪卡普尼奥);moviestars.addItem(桑德桑德.布洛克布洛克);moviestars.addItem(休休.葛兰特葛兰特);moviestars.addItem(朱莉亚朱莉亚.罗萡茨罗萡茨);用来向用户显示一个选择列用来向用户显示一个选择列表表 用户界面上的组件可以按不同方式排列。用户界面上的组件可以按不同方式排列。Java使用布局管理器来管理这些排列方式使用布局管理器来管理这些排列方式。每当需要重新调整屏幕大小或重新绘制屏每当需要重新调整屏幕大小或重新绘制屏幕上任一项目时,就要用到布局管理器。幕上任一项目时,就要用到布局管理器。AWT提供一组用来进行布局管理的类,称为提供一组用来进行布局管理的类,称为布局管理器或布局。所有布局都实现布局管理器或布局。所有布局都实现 LayoutManager接口。接口。Java中的中的布局类型包括以下几种:布局类型包括以下几种:-FlowLayout(流式布局)流式布局)-BorderLayout(边界布局)(边界布局)-GridLayout(网格布局)(网格布局)-GridBagLayout(网格包布局)(网格包布局)-CardLayout(卡片布局)(卡片布局)每个布局管理器都有自己特定的用途。每个布局管理器都有自己特定的用途。-要按行和列显示几个同样大小的组件,要按行和列显示几个同样大小的组件,GridLayout 会比较合会比较合-要在尽可能大的空间里显示一个组件,就要要在尽可能大的空间里显示一个组件,就要选择选择 BorderLayout 或或 GridBagLayout 每个容器(每个容器(Container对象)都有一个与对象)都有一个与它相关的缺省的布局管理器。它相关的缺省的布局管理器。-Applet 的缺省布局是的缺省布局是 FlowLayout 在没有设置新的布局前,在容器中添加在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。组件都按照该容器的缺省布局排列。可以通过可以通过setLayout()方法为容器设置新的方法为容器设置新的布局。布局。FlowLayout的构造函数有:的构造函数有:-FlowLayout():生成一个默认的流式布局生成一个默认的流式布局-FlowLayout(int alignment):可以设定每一行组可以设定每一行组件的对齐方式件的对齐方式-FlowLayout(int alignment,int horz,int vert):可以可以设定组件间的水平和垂直距离设定组件间的水平和垂直距离vApplet和面板的缺省布局和面板的缺省布局v组件从左上角开始按从左组件从左上角开始按从左到右、从上到下的方式排列到右、从上到下的方式排列FlowLayout mylayout=new FlowLayout();FlowLayout exLayout=new FlowLayout(FlowLayout.RIGHT);setLayout(exlayout);/为容器为容器设置新布局设置新布局 下面是下面是BorderLayout所定义的构造函数:所定义的构造函数:-BorderLayout():生成默认的边界布局生成默认的边界布局-BorderLayout(int horz,int vert):可以设定组件间可以设定组件间的水平和垂直距离的水平和垂直距离 v窗口窗口、框架和对话框框架和对话框等的缺省布局等的缺省布局v组件可被置于容器的组件可被置于容器的北、南、东、西或中间北、南、东、西或中间位置位置 BorderLayout 类定义了几个常量值以指定相类定义了几个常量值以指定相应区域:应区域:-BorderLayout.NORTH 对应容器的顶部对应容器的顶部-BorderLayout.EAST 对应容器的右部对应容器的右部-BorderLayout.SOUTH 对应容器的底部对应容器的底部-BorderLayout.WEST 对应容器的左部对应容器的左部-BorderLayout.CENTER 对应容器的中部对应容器的中部 加入组件方法:加入组件方法:void add(Component Obj,int region);.setLayout(new BorderLayout();Button btnEast=new Button(东东);Button btnWest=new Button(西西);Button btnNorth=new Button(北北);Button btnSouth=new Button(南南);Button btnCenter=new Button(中中);add(btnEast,BorderLayout.EAST);add(btnWest,BorderLayout.WEST);add(btnNorth,BorderLayout.NORTH);add(btnSouth,BorderLayout.SOUTH);add(btnCenter,BorderLayout.CENTER);.GridLayout的构造函数如下所示:的构造函数如下所示:-GridLayout():生成一个单列的网格布局生成一个单列的网格布局 -GridLayout(int row,int col):生成一个设定行数和列生成一个设定行数和列数的网格布局数的网格布局 -GridLayout(int row,int col,int horz,int vert):可以设可以设置组件之间的水平和垂直间隔置组件之间的水平和垂直间隔 v用于将容器区域划分用于将容器区域划分为一个矩形网格为一个矩形网格v组件按行和列排列组件按行和列排列.Button btn;/声明按钮数组声明按钮数组 String str=1,2,3,4,5,6,7,8,9;setLayout(new GridLayout(3,3);btn=new Buttonstr.length;/创建按钮数组创建按钮数组 for(int i=0;istr.length;i+)btni=new Button(stri);add(btni);通过使用以下语法容器可获得通过使用以下语法容器可获得 GridBagLayout:GridBagLayout gb=new GridBagLayout();ContainerName.setLayout(gb);要使用此布局,必须提供各组件的大小和布要使用此布局,必须提供各组件的大小和布局等信息。局等信息。GridBagConstraints 类中包含类中包含 GridBagLayout 类用来定位及调整组件大小所需的全部信息。类用来定位及调整组件大小所需的全部信息。v组件大小不必相同组件大小不必相同v组件按行和列排列组件按行和列排列v放置顺序不一定为从左放置顺序不一定为从左至右和由上至下至右和由上至下 成员变量列表:成员变量列表:-gridx,gridy:指定组件放置于哪个单元中指定组件放置于哪个单元中-gridwidth,gridheight:指定指定组件将占用多少行组件将占用多少行和多少列和多少列-weightx,weighty:指定在一个指定在一个 GridBagLayout 中应如何分配空间中应如何分配空间,这些变量的缺省值为这些变量的缺省值为 0-ipadx,ipady:指定组件的最小高度和宽度指定组件的最小高度和宽度 成员变量列表:成员变量列表:-fill:指定在单元大于组件的情况下指定在单元大于组件的情况下,组件如组件如何填充此单元何填充此单元,共有共有4可选值。缺省值为:可选值。缺省值为:GridBagConstraints.NONE-anchor:指定将组件放置在单元中的位置,指定将组件放置在单元中的位置,共有共有9个可选值。缺省值为:个可选值。缺省值为:GridBagConstraints.CENTER 可存储几个不同的布局。可存储几个不同的布局。每个布局就像是一个卡片组中的一张卡片。每个布局就像是一个卡片组中的一张卡片。在一个给定的时间总会有一张卡片在顶层。在一个给定的时间总会有一张卡片在顶层。卡片通常为一个卡片通常为一个 Panel 对象。对象。每当需要许多面板切换,而每个面板需要每当需要许多面板切换,而每个面板需要显示为不同布局时,可以使用卡片布局。显示为不同布局时,可以使用卡片布局。Java 最新的事件处理方法是基于授权事件最新的事件处理方法是基于授权事件模型模型 事件源生成事件并将其发送至一个或多个事件源生成事件并将其发送至一个或多个监听器监听器 监听器简单地等待,直到它收到一个事件。监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,一旦事件被接受,监听器将处理这些事件,然后返回。然后返回。在在授权事件模型授权事件模型中,事件是一个描述事件中,事件是一个描述事件源状态改变的对象源状态改变的对象。通过鼠标、键盘与通过鼠标、键盘与 GUI 界面直接或间接交界面直接或间接交互都会生成事件。互都会生成事件。如:按下一个按钮、如:按下一个按钮、通过键盘输入一个字符、选择列表框中的通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。一项、点击一下鼠标等。事件源事件源 事件源是一个生成事件的对象事件源是一个生成事件的对象 一个事件源可能会生成不同类型的事件一个事件源可能会生成不同类型的事件 事件源提供了一组方法,用于为事件注册事件源提供了一组方法,用于为事件注册一个或多个监听器。一个或多个监听器。每种事件的类型都有其自己的注册方法。每种事件的类型都有其自己的注册方法。一般形式为:一般形式为:public void addListener(TypeListener e)AWT采取的事件控制过程采取的事件控制过程 监听器对象属于一个类的实例,这个类实监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为现了一个特殊的接口,名为“监听者接口监听者接口”事件源是一个对象,它可以注册一个或多事件源是一个对象,它可以注册一个或多个监听器对象,并向其发送事件对象。个监听器对象,并向其发送事件对象。事件源将在发生事件时向所有注册的监听事件源将在发生事件时向所有注册的监听器发送事件对象。器发送事件对象。监听器对象使用事件对象中的信息来确定监听器对象使用事件对象中的信息来确定它们对事件的响应。它们对事件的响应。按钮单击事件示例按钮单击事件示例public class MyEventTest extends Panel Button myButton=new Button(蓝色蓝色);./创建面板或其他创建面板或其他 GUI 组件组件 MyListener myAction=new MyListener();MyButton.addActionListener(myAction);private class MyListener implements ActionListener public MyListener()./初始化初始化 public void actionPerformed(ActionEvent event)./需要为事件进行的操作需要为事件进行的操作 实现了实现了ActionListener接口的监听器接口的监听器实现了实现了actionPerformed方法,方法,以便根据参数以便根据参数 ActionEvent 对对象的信息对事件做出响应象的信息对事件做出响应为按钮事件为按钮事件注册监听器注册监听器FocusEventAWTEventActionEventAdjustmentEventComponentEventTextEventItemEventContainerEventInputEventWindowEventPaintEventKeyEventMouseEventEventObject事件类事件类说明说明事件源事件源ActionEvent 通常按下按钮,双击列表项或选通常按下按钮,双击列表项或选中一个菜单项时,就会生成此事中一个菜单项时,就会生成此事件。件。Button、List、MenuItem、TextField AdjustmentEvent 操纵滚动条时会生成此事件。操纵滚动条时会生成此事件。Scrollbar ComponentEvent 当一个组件移动、隐藏、调整大当一个组件移动、隐藏、调整大小或成为可见时会生成此事件。小或成为可见时会生成此事件。Component ItemEvent 单击复选框或列表项时,或者当单击复选框或列表项时,或者当一个选择框或一个可选菜单的项一个选择框或一个可选菜单的项被选择或取消时生成此事件。被选择或取消时生成此事件。Checkbox、CheckboxMenuItem、Choice、List FocusEvent 组件获得或失去键盘焦点时会生组件获得或失去键盘焦点时会生成此事件。成此事件。Component事件类事件类说明说明事件源事件源KeyEvent 接收到键盘输入时会生成此事件。接收到键盘输入时会生成此事件。Component MouseEvent 拖动、移动、单击、按下或释放拖动、移动、单击、按下或释放鼠标或在鼠标进入或退出一个组鼠标或在鼠标进入或退出一个组件时,会生成此事件。件时,会生成此事件。Component ContainerEvent 将组件添加至容器或从中删除时将组件添加至容器或从中删除时会生成此事件会生成此事件。Container TextEvent 在文本区或文本域的文本改变时在文本区或文本域的文本改变时会生成此事件会生成此事件 。TextField、TextArea WindowEvent 当一个窗口激活、关闭、当一个窗口激活、关闭、失效、失效、恢复、最小化、打开或退出时会恢复、最小化、打开或退出时会生成此事件。生成此事件。Window 监听器通过实现监听器通过实现 java.awt.event 包中定义的包中定义的一个或多个接口来创建。一个或多个接口来创建。在发生事件时,事件源将调用监听器定义在发生事件时,事件源将调用监听器定义的相应方法。的相应方法。有兴趣接收事件的任何监听器类都必须实有兴趣接收事件的任何监听器类都必须实现监听器接口。现监听器接口。事件监听器事件监听器 方法方法 ActionListener actionPerformed AdjustmentListener adjustmentValueChanged ComponentListener componentResizedcomponentMovedcomponentShowncomponentHidden ContainerListener componentAddedcomponentRemoved FocusListener focusLost、focusGained ItemListener itemStateChanged 事件监听器事件监听器 方法方法 KeyListener keyPressed、keyReleasedkeyTyped MouseListener mouseClicked、mouseEnteredmouseExited、mousePressedmouseReleased MouseMotionListener mouseDragged、mouseMoved TextListener textChanged WindowListener windowActivated、windowDeactivated windowClosed、windowClosingwindowIconified、windowDeiconifiedwindowOpened 适配器类适配器类 事件监听器接口事件监听器接口 ComponentAdapter ComponentListener ContainerAdapter ContainerListener FocusAdapter FocusListener KeyAdapter KeyListener MouseAdapter MouseListener MouseMotionAdapter MouseMotionListener WindowAdapter WindowListener 为了使事件处理变得简单,为了使事件处理变得简单,JavaJava 为为具有多个方法的监听器接口提供适具有多个方法的监听器接口提供适配器类。适配器类实现并提供了一配器类。适配器类实现并提供了一个事件监听器接口中的所有的方法,个事件监听器接口中的所有的方法,但这些方法都是空方法。但这些方法都是空方法。private class MyMouseAdapter extends MouseAdapter private Color bgColor;public MyMouseAdapter(Color c)bgColor=c;public void mouseClicked(MouseEvent mevent)setBackground(bgColor);repaint();事件源描述事件对象中事件的性质。事件源描述事件对象中事件的性质。每个事件源都被映射至一个或多个事件监听每个事件源都被映射至一个或多个事件监听器,发生事件时需要调用这些事件监听器。器,发生事件时需要调用这些事件监听器。事件源随后通过将事件对象传递至监听器接事件源随后通过将事件对象传递至监听器接口类的方法,将事件信息发送到监听器接口。口类的方法,将事件信息发送到监听器接口。监听器分析事件对象找出事件信息,监听器分析事件对象找出事件信息,以便给以便给出响应出响应。任何任何 GUI 对象的获得或失去焦点都被视为对象的获得或失去焦点都被视为焦点事件,并且事件源必须向事件监听器焦点事件,并且事件源必须向事件监听器通知事件对象已失去或已获得焦点。通知事件对象已失去或已获得焦点。焦点监听器需要实现两个方法:焦点监听器需要实现两个方法:focusGained 和和 focusLost。要进行错误检查或数据校验时,对焦点的要进行错误检查或数据校验时,对焦点的捕捉就显得尤其重要。捕捉就显得尤其重要。public void focusLost(FocusEvent event)if(event.getComponent()=ccField&!event.isTemporary()if(!checkFormat(ccField.getText()ccField.requestFocus();实现了当捕捉到失去实现了当捕捉到失去焦点事件时如何响应焦点事件时如何响应 检验失去焦点的组件中检验失去焦点的组件中的文本格式是否正确的文本格式是否正确 如果格式不正确,将焦如果格式不正确,将焦点移回到该组件点移回到该组件 当一个窗口被激活、禁止、关闭、正在关当一个窗口被激活、禁止、关闭、正在关闭、闭、最小化、恢复、打开时将生成窗口事最小化、恢复、打开时将生成窗口事件。件。需要实现的方法如下:需要实现的方法如下:windowActivated、windowClosedwindowClosing、windowDeactivatedwindowDeiconified、windowIconifiedwindowOpenedclass MyFrame extends Frame boolean w;public MyFrame()w=false;setTitle(测试适配器类测试适配器类);setSize(300,200);MyPanel panel=new MyPanel();add(panel);addWindowListener(new MyWindowAdapter();private class MyWindowAdapter extends WindowAdapter public void windowClosing(WindowEvent wevent)if(w)dispose();else System.exit(0);实现了实现了w windowClosing方法方法,以响应窗口关以响应窗口关闭时的事件闭时的事件 import java.awt.*;import java.awt.event.*;public class MyAdapterDemo public static void main(String args)MyFrame frm=new MyFrame();frm.show();在按下或释放键盘上的一个键时,将生在按下或释放键盘上的一个键时,将生成键盘事件。成键盘事件。keyEvent 类包含用来表示按下或点击的类包含用来表示按下或点击的键的常量。键的常量。生成生成 keyEvent 时将调用时将调用 keyListener。如果程序需要处理特殊的键,如方向键,如果程序需要处理特殊的键,如方向键,需要通过调用需要通过调用keyPressed()方法来处理。方法来处理。键盘事件键盘事件public void keypressed(keyEvent k)int keyCode=k.getKeyCode();if(keyCode=k.VK_RIGHT&k.isShiftDown().检测用户是否按下了检测用户是否按下了Shift+Shift+右箭头键右箭头键 键盘事件示例键盘事件示例class MyPanel extends Panel public MyPanel()TextField tField=new TextField(20);add(tField);MyKeyAdapter bAction=new MyKeyAdapter();tField.addKeyListener(bAction);private class MyKeyAdapter extends KeyAdapter public void keyPressed(KeyEvent kevent)setBackground(Color.blue);repaint();public void keyReleased(KeyEvent kevent)setBackground(Color.red);repaint();public void keyTyped(KeyEvent kevent)if(kevent.getKeyChar()=x)System.exit(0);按下键时背景变为兰色,按下键时背景变为兰色,释放键时背景变为红色释放键时背景变为红色,输入字符输入字符x x时退出程序时退出程序鼠标事件鼠标事件 任何时候移动、单击、按下或释放鼠标,任何时候移动、单击、按下或释放鼠标,都会生成鼠标事件。都会生成鼠标事件。鼠标事件有两种监听器:鼠标事件有两种监听器:MouseListener 和和 MouseMotionListener。需要实现的方法如下:需要实现的方法如下:mouseClicked、mouseEntered、mouseExited mousePressed、mouseReleased mouseDragged、mouseMoved public void mouseClicked(MouseEvent m)int x=m.getX();int y=m.getY();int clickCount=m.getClickCount();if(clickCount=2)Graphics g=getGraphics();g.drawString(鼠标双击!鼠标双击!,x,y);g.dispose();鼠标事件示例鼠标事件示例获得点击鼠标时鼠标获得点击鼠标时鼠标指针的指针的x x及及y y坐标坐标 确定单击和双确定单击和双击击 所有所有AWT事件源均支持监听器的多点传事件源均支持监听器的多点传送模型。送模型。可以将同一事件发送到多个监听器对象。可以将同一事件发送到多个监听器对象。需要向一个事件源添加多个监听器,以需要向一个事件源添加多个监听器,以便使所有注册的监听器都能够对事件源便使所有注册的监听器都能够对事件源生成的事件作出响应生成的事件作出响应。具体案例分析见本书具体案例分析见本书 Java1.2引入称为引入称为Swing的新的的新的GUI组件库。组件库。Swing包括包括javax.swing包及其子包。包及其子包。Swing有一个与平台无关的实现,而且具有有一个与平台无关的实现,而且具有一个艺术状态的属性集一个艺术状态的属性集。尽管尽管Swing独立于独立于AWT,但它是依照基本的但它是依照基本的 AWT类实现的。类实现的。Swing 结构结构ObjectComponentJFrameContainerWindowFrameDialogJDialogJTextJComboBoxJLabelJListJMenuBarJOptionPaneJPanelJScrollBarAbstractButtonJToggleButtonJMenuItemJButtonJCheckBoxJRadioButtonJComponentJMenu Swing 组件独立于本地窗口系统。组件独立于本地窗口系统。Swing组件除了组件除了 AbstractButton 类之外都以类之外都以 J 开头。开头。Swing 组件是基于组件是基于 AWT 构建。构建。包含包含 AWT 可视化组件的替代组件,也包含可视化组件的替代组件,也包含复杂组件复杂组件-树和表树和表 设计设计 GUI 时,都有用于放置可视化组件的时,都有用于放置可视化组件的主窗口。主窗口。Container 对象可用于将组件组合在一起。对象可用于将组件组合在一起。容器中的组件根据特定布局排列。容器中的组件根据特定布局排列。Swing 中的容器有两类:中的容器有两类:-顶级容器顶级容器 -中间容器中间容器 JFrame:用于框架窗口的类,此窗口带有用于框架窗口的类,此窗口带有边框、标题、用于关闭和最小化窗口的图边框、标题、用于关闭和最小化窗口的图标等。带标等。带 GUI 的应用程序通常至少使用一的应用程序通常至少使用一个框架窗口个框架窗口。JDialog:用于对话框的类。用于对话框的类。JApplet:用于使用用于使用 Swing 组件的组件的 Java Applet 的类的类。JPanel:最灵活、最常用的中间容器。最灵活、最常用的中间容器。JScrollPane:与与 JPanel 类似,但还可在大的类似,但还可在大的组件或可扩展组件周围提供滚动条。组件或可扩展组件周围提供滚动条。JTabbedPane:包含多个组件,但一次只显示包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。一个组件。用户可在组件之间方便地切换。JToolBar:按行或列排列一组组件(通常是按行或列排列一组组件(通常是按钮)。按钮)。菜单栏菜单栏顶级容顶级容器器GUI组件组件GUI组件组件内容窗内容窗格格基本的基本的 Swing 应用程序应用程序import javax.swing.*;public class HelloSwing public static void main(String args)JFrame frame=new JFrame(HelloSwing);JLabel label=new JLabel(你好,你好,Swing);frame.getContentPane().add(label);frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);frame.setSize(300,200);frame.setVisible(true);导入必要的包,一般还需导入:导入必要的包,一般还需导入:import java.awt.*;import java.awt.event.*;设置一个设置一个顶级容器顶级容器创建一个创建一个Swing组组件件将组件添加到将组件添加到容器内容窗格容器内容窗格实现了在单击实现了在单击“关闭关闭”按钮按钮时,时,可以关闭窗口。可以关闭窗口。如果使用的如果使用的早期版本的平台,则需要通早期版本的平台,则需要通过事件监听器实现过事件监听器实现 是是放置其他放置其他 Swing 组件的顶级容器组件的顶级容器 JFrame 组件用于在组件用于在 Swing 程序中创建窗体程序中创建窗体 它的构造函数:它的构造函数:JFrame()JFrame(String Title)组件必须添加至内容窗格,而不是直接添组件必须添加至内容窗格,而不是直接添加至加至 JFrame 对象,示例:对象,示例:frame.getContentPane().add(b);JPanel 组件是一个中间容器组件是一个中间容器 用于将小型的轻量级组件组合在一起用于将小型的轻量级组件组合在一起 JPanel 的缺省布局为的缺省布局为 FlowLayout JPanel 具有下列构造函数:具有下列构造函数:JPanel()JPanel(LayoutManager lm)Swing 的按钮相对于的按钮相对于AWT中中Button类提供了类提供了更多的功能。更多的功能。JButton类允许用图标、字符串或两者同时类允许用图标、字符串或两者同时构造一个按钮。构造一个按钮。构造函数如下:构造函数如下:JButton()JButton(Icon icon):icon表示使用的图标表示使用的图标 JButton(String text):text表示使用的字符串表示使用的字符串 JButton(String text,Icon icon)ImageIcon buttonIcon1=new ImageIcon(on.gif);JButton b1=new JButton(First Button,buttonIcon1);b1.setMnemonic(KeyEvent.VK_F);设置键盘设置键盘快捷方式快捷方式创建一个带图标创建一个带图标的的JButtonimport java.awt.*;import javax.swing.*;class PanelDemo extends JFrame public PanelDemo(String title)super(title);Container c=getContentPane();JPanel cpane=new JPanel();JButton ok=new JButton(确定确定);cpane.add(ok);JButton cancel=new JButton(取消取消);cpane.add(cancel);c.add(cpane,BorderLayout.SOUTH);public static void main(String args)PanelDemo pd=new PanelDemo(JPanel测试测试);pd.setSize(300,200);pd.setVisible(true);它既可以显示文本也可以显示图像它既可以显示文本也可以显示图像 构造函数如下:构造函数如下:JLabel(Icon icon):icon表示使用的图标表示使用的图标 JLabel(String text,Icon icon,int align):text表示使表示使用的字符串用的字符串;icon表示使用的图标表示使用的图标;align表示水平表示水平对齐方式,其值可以为:对齐方式,其值可以为:LEFT、RIGHT、CENTER。ImageIcon icon=new ImageIcon(Calv.gif);JLabel calv_label=new JLabel(这是这是 Calvin,icon,SwingConstants.LEFT);JtextComponent 为所有为所有 Swing 文本组件的根类文本组件的根类JTextField JTextComponentJEditorPaneJTextAreaJTextPaneJPasswordField JTextField 组件允许输入或编辑单行文本组件允许输入或编辑单行文本 此类的构造函数包括:此类的构造函数包括:JTextField()JTextField(Document doc,String text,int columns)JTextField(int columns)JTextField(String text)JTextField(String text,int columns)Container con=getContentPane();con.setLayout(new FlowLayout();JLabel jl=new JLabel(“文本域文本域”);con.add(jl);JTextField tf=new JTextField(20);con.add(tf);JTextArea 组件用于接受来自用户的多行文本组件用于接受来自用户的多行文本 它可实现可滚动界面它可实现可滚动界面 JTextArea 组件可使用下列构造函数创建:组件可使用下列构造函数创建:JTextArea()JTextArea(int rows,int cols)JTextArea(String text)JTextArea(String text,int rows,int cols)JTextArea(Document doc)JTextArea(Document doc,String text,int rows,int cols)JLabel jl=new JLabel(“文本区文本区”);con.add(jl);JTextArea ta=new JTextArea(5,10);con.add(ta);为了简化表单填写过程,通常为用户提供为了简化表单填写过程,通常为用户提供多种可供选择的选项,而无需用户写出他多种可供选择的选项,而无需用户写出他们的响应。常用于选择性输入的组件有:们的响应。常用于选择性输入的组件有:复选框复选框 单选按钮单选按钮 列表框列表框 组合框组合框 复选框用于为用户提供一组选项复选框用于为用户提供一组选项 JCheckBox 类具有下列构造函数:类具有下列构造函数:JCheckBox()JCheckBox(Icon icon)JCheckBox(Icon icon,boolean selected)JCheckBox(String text)JCheckBox(String text,boolean selected)JCheckBox(String text,Icon icon)JCheckBox(String text,Icon icon,boolean selected)单选按钮允许用户从多个选项中选择其中一单选按钮允许用户从多个选项中选择其中一个个 ButtonGroup 用于在用于在 Swing 中创建组中创建组 JRadioButton 对象可使用下列构造函数创建:对象可使用下列构造函数创建:-JRadioButton()-JRadioButton(Icon icon)-JRadioButton(Icon,boolean selected)-JRadioButton(String text)-JRadioButton(String text,boolean selected)-JRadioButton(String text,Icon icon)-JRadioButton(String text,Icon icon,boolean selected)import java.awt.*;import javax.swing.*;class Hobby extends JPanel JCheckBox c1=new JCheckBox(阅读阅读,false);JCheckBox c2=new JCheckBox(音乐音乐,false);JCheckBox c3=new JCheckBox(绘画绘画,false);JRadioButton rad1=new JRadioButton(大专大专);JRadioButton rad2=new JRadioButton(本科本科);JRadioButton rad3=new JRadioButton(硕士硕士);JLabel jl=new JLabel(您有什么爱好?您有什么爱好?);JLabel j2=new JLabel(您的最高学历?您的最高学历?);JButton exitbtn=new JButton(退出退出);public Hobby()setLayout(new GridLayout(9,1);add(jl);add(c1);add(c2);add(c3);add(j2);add(rad1);add(rad2);add(rad3);add(exitbtn);public class Hobbytest extends JFrame Hobbytest()
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!