JAVA语言程序设计 第十一章 图形用户界面

Slides:



Advertisements
Similar presentations
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
Advertisements

JAVA 编 程 技 术 主编 贾振华 2010年1月.
JAVA程序设计 天津工程职业技术学院计算机工程系软件技术教研室.
图形界面设计 福州大学阳光学院 张海歆.
项目2 字符格式和段落编排 2017年3月7日6时54分.
Java程序设计教程 第一讲 Java概述.
Java System Concepts and Animation Programming
插入超链接 高邮市第一实验小学 范太国 任务一:设置文本超链接 任务一:设置文字超链接 步骤:1、选定文字并右击,在快捷菜单 中选择“超链接”命令。 2、在弹出的对话框中选择左侧“链接到:”中的“本文档中的位置(A)”项,在“请选择文档中的位置(C):”中选择需要链接的幻灯片,单击“确定”按钮。
第二十章 圖型介面與網路對播 (GUI and Intercross Transition) 20-1 簡介 20-2 ActionListener Interface 20-3 ActionEvent Class 20-4 Vector Class 20-5 圖型介面與視窗關閉 20-6 圖型介面與資料顯示.
視窗程式設計 2. 視窗版面配置 Chih Hung Wang Reference:
6.5 图形界面的布局设计 每一个容器组件都有一个默认的布局管理方式,也可以用setLayout方法来设置其他布局管理器。一旦确定了布局管理方式,容器组件就可以用add方法加入组件。 布局管理器用来确定组件在容器中的位置和大小,AWT中定义了布局管理器接口LayoutManager的实现类来实现此功能。
UI(用户界面)集训班 Illustrator 高级班.
Java Applet的运行原理 在网页向Java Applet传值 在Java Applet中播放声音 在Java Applet中使用组件
第11章 Java多媒体技术.
第6章 图形用户界面设计 6.1 图形用户界面概述 6.2 GUI标准组件的使用 6.3 Java的事件处理 6.4 窗口及菜单设计
第 18 章 圖形使用者介面.
第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之二).
在PHP和MYSQL中实现完美的中文显示
第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之一).
第九章 字符串.
Java语言程序设计 马 皓
第9章 图形用户界面(GUI)设计.
Ch02 視窗Swing套件 物件導向系統實務.
Java语言程序设计-图形用户界面设计(2)
2018/11/11 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
2018/11/15 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
Java语言程序设计 第六部分 Java图形用户界面.
Ch07 Java Applets 物件導向系統實務.
視窗程式設計 9. 清單方塊 Chih Hung Wang Reference:
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
視窗程式設計 10. 組合方塊與對話盒 Chih Hung Wang Reference:
Java程序设计 第15章 创建用户界面.
記事本 物件導向系統實務.
第九章 窗口、菜单和对话框 本章的任务: 介绍图形用户界面的高级组件。这些组件包括窗口、菜单和对话框等,它们可以构造出标准GUI应用程序。最后,简要介绍Java Swing的使用方法。
記事本 物件導向系統實務.
JAVA 2 新觀念教本 ---邁向SCJP專業認證--- 易瓏資訊 林新德 著.
走进编程 程序的顺序结构(二).
辅导课程六.
Java语言程序设计 第八部分 Applet小程序.
AWT Event Model.
Ch04 事件處理 物件導向系統實務.
CH03 為自己的視窗加上小元件 物件導向系統實務.
第4章 Java图形用户界面设计.
CH04 視窗中元件排排坐 物件導向系統實務.
事件處理.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第十章 基于Swing的图形用户界面设计.
Java语言程序设计 清华大学出版社 第8章 输入输出流(1).
Multithread 多執行緒 以GUI為例了解物件以及Event
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
第五章 事件处理机制 Java 事件处理机制 窗口事件 鼠标事件 键盘事件 例:ButtonTest.java.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
组件 复选框(Checkbox)可以让用户进行多项选择。复选框有两种状态,分别为“开(on)”和“关(off)”。当用户点中复选框的时候,复选框的状态就会改变。 1、创建复选框 (1)声明复选框。 Checkbox mycheckbox =new Checkbox (); (2)添加复选框。将复选框组件放置到容器中。
项目二:HTML语言基础.
iSIGHT 基本培训 使用 Excel的栅栏问题
3.16 枚举算法及其程序实现 ——数组的作用.
_13简单的GDI绘图操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
Chapter 18 使用GRASP的对象设计示例.
第十二章 JFC/Swing 概述  Swing组件  Swing应用程序结构  JComponent类.
姓 名: 求职意向: 岗位竞聘报告 注:文本框可根据需求改变颜色、移动位置;文字可编辑.
第二章 Java基本语法 讲师:复凡.
Java语言程序设计 清华大学出版社 第6章 java图形与图像处理.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
事件处理 例: import java.applet.Applet; import java.awt.*;
Summary
变量定位图形 Java中数据的类型分为四种:基本数据类型、数组类型、类类型以及接口类型。任何常量和变量都一定是上述四种数据类型中的一种。简单数据类型的实例化有两种:变量和常量。 变量名和常量名必须是Java语言中合法的标识符。 常量是在程序运行期间值不改变的量。 变量是在程序运行期间值可通过赋值改变的量,
Presentation transcript:

JAVA语言程序设计 第十一章 图形用户界面 西北第二民族学院计算机科学与技术系 研究员 王伦津

Java 的图形用户界面AWT包 在java中,AWT是用来处理图形最基本的方式,它可以用来创建java的applet和窗口。AWT包提供4大类: 1、图形界面组件,如:窗口、按钮、菜单等 2、2D图形绘制组件,如:直线、圆形。 3、布局对象:用来安排图形界面组件的位置。 4、事件处理对象,用来处理图形界面组件所触发的事件。 图形用户界面(Graphics User Interface 简称GUI)通过提供菜单、按钮、标签标识、鼠标等,完成对计算机发出指令、启动应用程序等操作任务。

AWT组件的层次关系 AWT类放置在java,aw包中

建立窗口的Frame类 Java 中“窗口”被视为一个容器。它可以把各种不同的图形界面组件放置到这个容器中,而这些图形界面组件就是容器中的接口,通过图形界面组件所提供的方法,来完成一定的功能。 创建窗口的基本和必要操作包括如下步骤: 1、设置窗口的大小 2、给窗口一个标题 3、在屏幕的某个位置放置窗口 4、显示窗口 5、关闭窗口

// 创建一个Frame 类窗口 import java.awt.*; public class Window11_1 { static Frame fra=new Frame("这是一个窗口程序 "); //创建一个窗口对象fra,并设置窗口标题为“这是一个窗口程序” public static void main(String[] args) fra.setBounds(0,0,300,200); // 继承Component类的方法,设置窗口大小并将窗口放置在屏幕的某个位置 fra.setResizable(false);//设置窗口尺寸不可以改变 fra.setState(fra.NORMAL);//设置窗口为标准状态 fra.show(); //继承Window类的方法,在屏幕上显示窗口 }

Java.awt.Frame 的方法 Frame类的构造方法 主要功能 Frame() 创建没有标题的窗口 Frame(String title) 创建以title 为标题的窗口 Frame 类的方法 Int getState() 获得Frame窗口的状态(Frame.Normal 表示一般状态,Frame.ICONIFIED表示最小化状态 void setState(int state) 设置Frame 窗口状态 (同上) String getTitle() 获得Frame窗口的标题 void setTitle(String title) 设置 Frame窗口的标题 Boolean isResizable() 测试Frame窗口是否可以改变大小 void setResizable(boolean r) 设置Frame窗口是否可以改变大小 Image getIconImage() 返回窗口的最小化图标 void setIconImage(Image img) 设置窗口的最小化图标为img Java.awt.Frame 的方法

// 设置窗口图标 import java.awt.*; import javax.swing.ImageIcon; public class Window11_2 { static Frame fra=new Frame("这是一个窗口程序 "); static ImageIcon icon=new ImageIcon("14_3.jpg");// 创建icon对象为14_3.jpg public static void main(String[] args) fra.setBounds(0,0,200,100); fra.setIconImage(icon.getImage());// 将icon 对象设置为窗口图标 fra.show();//显示窗口 } 14_3.jpg文件必须放置在与程序相同的目录中

使用图形用户界面AWT的组件 图形用户界面组件包括按钮、标签、复选框等。在图形程序中,这些组件被放置到窗口容器中,通过设置或引用它们完成相应的功能。 Java.awt.Label 的方法 Label类的构造方法 主要功能 Label() 创建一个没有文字的标签 Label(Strng str) 创建一个以str为文字的标签 Label(String str,int align) 创建一个以str为文字的标签,并以align 为对齐方式LEFT CENTER RIGHT 表示左中右 Label类的方法 int getAligment() 返回标签内文字的对齐方式 void setAligment(int align) 设置标签内文字的对齐方式 String getText() 获得标签内的文字 void setText(String text) 设置标签内的文字

标签组件是用来在窗口中显示文字的组件,由Label类来创造 // 在窗口中的指定位置创建一个标签 import java.awt.*; public class Window11_3 { public static void main(String[] args) Frame fra=new Frame("这是创建标签的程序 "); Label b1=new Label(); // 创建一个空标签 fra.setBounds(0,0,300,200); b1.setText("欢迎使用JAVA语言");//为标签添加文字 b1.setAlignment(Label.CENTER);//设置标签在窗口中央位置 b1.setBackground(Color.blue);//引用Componentlei的方法设置标签背景颜色 b1.setForeground(Color.red); //引用Componentlei的方法设置标签中的文字颜色 fra.add(b1) ; fra.setVisible(true); } Color类用来设置颜色,构造方法有两个 Color(float r,float g,float b);和 Color(int r,int g,int b); 其中r、g、b表示红绿蓝3色float 型取值范围0.0—1.0;int 型取值范围0-256

按钮组件 按钮组件提供用户快速启动某一动作的方法, 通过点击鼠标或按下键盘某键完成一定的操作。由java.awt类库的Button类创建。 主要功能 Button() 创建一个没有标题的按钮 Button(String str) 创建一个以str 为标题的按钮 Button类的方法 String getLabel() 获得按钮的标题 void setLabel(String str) 获得设置按钮的标题为str

import java.awt.*; // 创建 按钮 public class Window11_4 { public static void main(String[] args) { Frame fra=new Frame(" 创建按钮程序 "); Button but=new Button("push me"); // 创建一个按钮 fra.setBounds(0,0,300,200); fra.add(but) ; //将按钮添加到窗口中 fra.setVisible(true); //显示窗口 } import java.awt.*; // 创建一个给定大小尺寸的 按钮 public class Window11_5 { public static void main(String[] args) { Frame fra=new Frame(" 创建按钮程序 "); Button but=new Button("push me"); // 创建一个按钮 fra.setBounds(0,0,300,200); fra.setLayout(null);//关闭页面设置 but.setBounds(50,50,100,50);//设置按钮的大小 fra.add(but) ; //将按钮添加到窗口中 fra.setVisible(true); //显示窗口 }

文本框 文本框是用来在窗口中显示文字的矩形框,这些文字可以被用户编辑。文本框可以用来输入文字、编辑文字并显示输入的文字、读取用户输入的文字。由TextField类来创建。 TextField类的构造方法 主要功能 TextField() 创建一个空的文本框 TextField(int colnmns) 创建一个空的文本框,具有指定的列 TextField(String text) 创建一个包含有”text” 内容的文本框 TextField(String text,int colnmns) 创建一个具有指定列且包含内容的文本框 TextField类的方法 String getText() 获得文本框的内容 int getColumns() 获得文本框的列数 void setText(String text) 设置文本框的内容为text void setColumns(int columns) 设置文本框的列数

// 创建文本框 import java.awt.*; public class Window11_6 { public static void main(String[] args) throws Exception Frame fra=new Frame(" 创建文本框程序 "); TextField txt1=new TextField(10 ); TextField txt2=new TextField(10); fra.setBounds(0,0,300,200); fra.setLayout(null);//关闭页面设置 txt1.setBounds(50,50,130,20);//设置文本框的大小 txt2.setBounds(50,70,130,20); fra.add(txt1) ; //将 文本框添加到窗口中 fra.add(txt2) ; fra.setVisible(true); //显示窗口 // System.in.read(); // System.exit(0); }

在网页中加载图像或照片 在AWT中使用Image处理图像,它是直接从java.Object类派生的 Java.awt.Image 的方法 主要功能 Image() 创建一个Image对象 如果在applet中加载图像,可以使用Applet类的getImage()方法 Image getImage(URL url); Image getImage(URL url,String name); URL 是统一资源定位器的简称,表示Internet/Intranet上的资源位置

//该程序取自李尊朝等编著的“JAVA语言程序设计“第172页例11-7 //在网页中加载图形 import java.awt.*; import java.applet.*; public class Img11_7 extends Applet { Image image; public void paint(Graphics g) { g.drawImage(image,10,10,this); } public void init() image=getImage(getDocumentBase(),"02.gif"); 在java中,各种文字都是以图形的方式输出,通过使用Font类和FontMetrics类的方法设置字型、字体大小等

设置字型、字体大小 java.awt.Font 的方法 Font类的构造方法 主要功能 Font(String fontname,int style,int size) 创建的字体名称为fontname 、字体样式为style、字体大小为size Font类的方法 Font decode(String str) 获得字符串所描述的字体 String getFontName() 获得字体名称 int getStyle() 获得字体的样式 int getSize() 获得字体的大小尺寸 boolean isPlain() 测试字体是否是正常体 boolean isBold() 测试字体是否是粗体 boolean isItalic() 测试字体是否是斜体 String toString() 将此对象转换为字符串表示

FontMetrics类获得文字详细说明 主要功能 FontMetrics(Font font) 创建一个FontMetrics类的对象 FontMetrics类的方法 Font getFont(r) 获得当前字体 int getLeading() 获得字体的Leading(字冠)值 int getAscent() 获得字体的Ascent(上差)值 int getDecent() 获得字体的Decent(下差)值 int getHeight() 获得字体的Height(高度)值 String toString() 返回对象的字符串表示 Java.awt.FontMetrics的方法

Graphics类设置字体及输出字符uo字符串内容 setFont(Font myfont); Java.awt.Graphics的方法 Graphics类的方法 主要功能 drawString(String str,int x,int y) 以x,y 为起点位置,用当前的颜色和字体绘制str字符串内容 drawChars(char[] ch,int offset,int number,intx,int y) 从字符数组ch 的第offset位置的字符开始(offset为数组下标),总共截取number个字符:以x,y为坐标的起始位置,用当前的颜色和字体绘制number个字符 drawBytes(byte[] bt,int offset,int number,int x,int y) 从字节数组bt 的第offset位置的字符开始(offset为数组下标),总共截取number个字符:以x,y为坐标的起始位置,用当前的颜色和字体绘制number个字符

// 设置Font 类字体并显示此字体 import java.awt.*; public class Font11_8 extends Frame { public Font11_8() { super("设置字体程序 Example"); setSize(420,125); show(); } public void paint(Graphics g) { g.setFont(new Font("Serif",Font.BOLD,12));//设置当前字体为常规并加粗 g.drawString("Serif 12 point bold." ,20,50);// 按当前字体输出内容 g.setFont(new Font("",Font.ITALIC,24)); //斜体字体 g.drawString("Monospaced 24 point italic. " ,20,70);// g.setFont(new Font("SansSerif",Font.PLAIN,14));//常规字体 g.drawString("SansSerif 14 point plain. " ,20,90); g.setColor(Color.red); g.setFont(new Font("Serif",Font.BOLD+Font.ITALIC,18)); g.drawString(g.getFont().getName()+" "+g.getFont().getSize()+ "point bold italic.",20,110); } public static void main(String args[]) { Font11_8 app=new Font11_8();//创建Font11_8对象app // 同时会引用其构造方法,并执行类中规定的功能

import java.awt.*; public class Font11_9 extends Frame { public Font11_9() { super("FontMetrics Example"); setSize(510,210); show(); } public void paint(Graphics g) { g.setFont(new Font("sansSerif",Font.BOLD,12));//设置当前字体 FontMetrics fm=g.getFontMetrics(); //创建FontMetrics类对象fm g.drawString("Current font:"+g.getFont(),10,40);//获得当前字体信息 g.drawString("Ascent:"+fm.getAscent(),10,55);//输出当前字体的上差 g.drawString("Descent:"+fm.getDescent(),10,70); g.drawString("Height:"+fm.getHeight(),10,85); g.drawString("Leading:"+fm.getLeading(),10,100); Font font=new Font("Serif",Font.ITALIC,14); fm=g.getFontMetrics(font); g.setFont(font); //设置当前字体为斜体,大小为14 g.drawString("Current font:"+g.getFont(),10,130); g.drawString("Ascent:"+fm.getAscent(),10,145); g.drawString("Descent:"+fm.getDescent(),10,160); g.drawString("Height:"+fm.getHeight(),10,175); g.drawString("Leading:"+fm.getLeading(),10,190); } public static void main(String args[]) { Font11_9 app=new Font11_9();//创建Font11_9对象app } } // 设置FontMetrics类字体并显示此字体

JAVA语言中的事件处理 在设计和实现图形用户界面的过程中,主要完成两个任务:第一是创建窗口并在窗口中添加各种组件,指定组件的属性和它们在窗口中的位置,从而构成图形界面的外观效果;第二是定义图形界面的事件和各种组件对不同事件的响应,从而实现图形界面与用户的交互。 Java 对事件处理采用委托时间模型的形式。它的含义是将事件的处理委托给独立的对象,使得用户界面与程序逻辑分开,整个“委托事件模型”由产生事件的对象、事件对象和监听者对象之间的关系所组成。 在事件产生时,产生事件的对象将于该对象相关的信息封装在一个事件对象中,并将该对象传递给监听者对象,监听者对象根据该事件对象内的信息决定适当的处理方式。监听者对象要得到事件件发生的通知,必须在程序中向产生事件的对象注册。

事件监听者的种类 1 ActionListener:处理动作事件,例如单击按钮 2 ComponetListener:处理组件被隐藏、移动、尺寸移动或显示事件 3 ContainerListener:处理在容器中加入组件或删除组件的事件 FocusListener:处理组件获得或失去焦点的事件 KeyListener:监听键盘事件 MouseListener:监听鼠标的单击、进入组件、退出组件或按下鼠标事件 MouseMotionListener:监听鼠标拖动或者移动的事件 TextListener:监听文本值改变的事件 9 WindowListener:处理窗口激活、失去活动窗口、最小化、不最小化、打开、关闭或者退出的事件

事件的种类 1 ActionEvent: 处理按钮、列表双击、单击菜单项目 ComponentEvent :处理组件被隐藏、移动、尺寸调整或者变为不可见的事件 3 FocusEvent:处理组件获得或失去焦点的事件 4 InputEvent:处理复选框和列表项单击、控件的选择和可选菜单项的选择事件 5 KeyEvent:处理键盘的输入 6 MouseEvent:处理鼠标拖动、移动、单击、按下、释放或者进入、退出组件的事件 7 TextEvent:处理文本区域或者文本区域的值得改动 8 WindowEvent:处理窗口激活、失去活动窗口、最小化、打开、关闭或者退出的事件

事件类的继承关系

定义事件响应接口及实现方法 每一个事件类都有唯一的事件处理方法接口。例如对于处理鼠标事件“MouseEvent”类的对应接口为“MouseListener”接口。当选择菜单时就会激发一个动作事件ActionEvent,在程序中就要加入一个能够听到这个事件的接口,实现这个接口就可以监听到事件的产生。 实现接口建立监听对象类handler Class handler implements ACtionListener{ … } 建立事件源与监听者的对应关系 对象名.addActionListener(handler) 如button.addActionListener(handler)的意思是监听者handler 向它的按钮对象(事件源)button 注册

事件处理流程 1、监听者对象handler向事件源对象button注册 button.addActionListener(handler) 2、按下按钮时,button 对象会产生一个ActionEvent类的对象事件something . 3、按钮会把事件something 根据注册传递给事件监听者handler 4、事件监听者handler实现监听需要实现“ActionListener”接口书写为 class handler implements ActionListener{ actionPerformed(ActionEvent e){ …… } 5、当事件发生时,引发的事件将被此事件的监听者监听到,并引发ActionListener类的阿磁体噢年Performed(ActionEvent e)方法响应动作事件。

事件监听者接口和事件监听者接口提供的方法 事件类 监听者接口 监听者接口提供的事件处理方法 ActionEvent ActionListener actionPerformed(ActionEvent e) AdjustmentEvent AdjustmentListener adjustmentValueChange(AdjustmentEvent e) ItemEvent ItemListener itemStateChange(ItemEvent e) KeyEvent KeyListener keyType(KeyEvent e) keyPressed(KeyEvent e) keyReleased(KeyEvent e) MouseEvent MouseListener mouseClicked (MouseEvent e) mouseEntered (MouseEvent e) mouseExited (MouseEvent e) mousePressed (MouseEvent e) mouseRelease (MouseEvent e) mouseDragged (MouseEvent e) mouseMoved (MouseEvent e)

事件监听者接口和事件监听者接口提供的方法 事件类 监听者接口 监听者接口提供的事件处理方法 TextEvent TextListener textValueChange(TextEvent e) WindowEvent WindowListener windpwActivated (WindowEvent e) windpwClosed(WindowEvent e) windpwClosing(WindowEvent e) windpwDeactivated(WindowEvent e) windpwDeiconifieded(WindowEvent e) windpwIconified(WindowEvent e) windpwOpened(WindowEvent e) ActionEvent 类使用的主要方法 1、getSource()方法,用来捕获引发事件的对象名 2、getActionCommmand()方法,用来获取引发事 件动作的命令名

//定义窗口事件以及对事件的实现 //匿名类只有类名没有方法,只能作为内嵌类存在 import java.awt.*; import java.awt.event.*; class Label11_10 extends Frame{ public Label11_10(){ super("Event Example"); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0);} } ); initialize(); } public void initialize(){ this.setLayout(null); Label b1=new Label(); setSize(300,200); b1.setText("欢迎使用java语言"); b1.setBounds(50,50,150,20); b1.setAlignment(Label.CENTER); b1.setBackground(Color.blue); b1.setForeground(Color.red); add(b1); setVisible(true); public static void main(String args[]){ new Label11_10(); 程序中为匿名类添加了方法见红字部分

//通过定义两个按钮事件 实现ActionListener接口 // 其默认方法, 是actionPerformed(ActionEvent e) import java.awt.*; import java.awt.event.*; import javax.swing.ImageIcon; class Label11_11 extends Frame implements ActionListener{ Button but1,but2; Label lb11; public Label11_11(){ super("Event Example"); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0);} } ); initialize(); } public void initialize() { setSize(300,200); this.setLayout(null); but1=new Button("but1"); but1.setBounds(10,40,70,25); but1.addActionListener(this) ; add(but1);

but2=new Button("but2"); but2.setBounds(105,40,70,25); but2.addActionListener(this) ; add(but2); lb11=new Label("0",Label.CENTER); lb11.setBounds(75,70,70,25); lb11.setForeground(Color.blue ); add(lb11); setVisible(true); } public void actionPerformed(ActionEvent e) {// if(e.getSource()==but1) { int value=(new Integer(lb11.getText())).intValue(); lb11.setText(String.valueOf(value+1)); else if(e.getSource()==but2) lb11.setText("0"); public static void main(String args[]){ new Label11_11(); 程序先建两个按钮,然后监听者this对每个按钮注册它的监听。根据条件语句中的方法获得引发事件的对象。

Swing包 为了克服AWT包中隐含的图形组件,在不同的操作平台上显示不同效果问题,1998年推出的JDK1.2版本时,将javax.swing 包列入java基础库。 AWT与swing包的比较 1、swing 包拥有4倍于AWT的用户界面组件 2、新版的swing包可能与旧版不兼容 3、swing包是建立在AWT包的基础上的,所以完全舍弃AWT包不大可能 4、AWT包的运行速度比swing包快` 5、将AWT包改写为swing包时,在很多情况下可以只在原有的AWT组件 的每个类名前面加上“J”即可。

创建JFrame窗口 JFrame类的构造方法 主要功能 JFrame() 创建没有标题的窗口 JFrame(String title) Container getContentPane() 获得窗口的ContentPane组件 int getDefaultCloseOperation() 当用户关闭窗口时的默认处理方法 int setDefaultCloseOperation() 设置用户关闭窗口时发生的操作 void update(Graphics g) 引用paint()方法重绘窗口 void remove(Component component) 将窗口中指定的组件删除 JMenuBar getMenuBar() 获得窗口中的菜单栏组件 void setLayout(LayoutManager manager) 设置窗口的布局

创建JFrame容器时注意以下几点 将按钮组件加入到窗口的一般操作方法: 1、设置窗口的ContentPane,创建按钮对象 1、创建的JFrame 窗口是不可见的,要使得可见,需要使用show() 方法或setVisible(boolean b)方法,其中setVisible中的参数b=true。 2、使用setSize方法设置窗口大小。 3、向JFrame 中添加组件时,必须先取得ContentPane,然后再使用add()方法把组件加入到ContentPane中,这与AWT包中的Frame直接使用add()方法添加组件不同。 将按钮组件加入到窗口的一般操作方法: 1、设置窗口的ContentPane,创建按钮对象 Container c=getContentPane(); but1=new JButton(“ 按钮1”); 2、添加按钮组件到JFrame窗口中 c.add(but1);

// 创建一个JFrame 窗口,这种窗口是不可见的 // 要使其可见需要使用show() 或setVisble(Boolean b)方法 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Label11_12 extends JFrame { public Label11_12(){ super(" 显示窗口程序"); setSize(300,200); show(); } public static void main(String args[]){ Label11_12 app=new Label11_12(); 此程序Label11_12 类继承JFrame,语句“super(”显示窗口程序“是程序引用父类的工作方法”JFrame(String title)”,设置窗口的标题:使用setSize()方法设置窗口大小,使用show()方法将窗口显示出来。

窗口事件 上例不能实现关闭窗口退出程序,必须强行退出,显然不能满足要求,原因是没有对窗口关闭操作创建它的事件响应方法。实现这一功能需要利用java 提供的WindowEvent窗口事件。 窗口事件 说明 WINDOW_ACTIVATED 窗口被激活 WINDOW_DEACTIVATED 窗口失活(当其他窗口被激活) WINDOW_CLOSED 窗口已被关闭 WINDOW_OPENED 窗口已被打开 WINDOW_CLOSING 窗口正被关闭 WINDOW_ICONIFIED 窗口被最小化为图标 WINDOW_DEICONIFIED 窗口被由图标恢复 WindowEvent 窗口事件

// 定义两个窗口,分别对没有激活的窗口做出隐藏处理 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class AWT11_13 extends JFrame { JFrame ff1=new JFrame(); JFrame ff2=new JFrame(); public AWT11_13() { ff1.setSize(300,200); ff1.setTitle("显示窗口1"); ff1.setVisible(true); ff1.addWindowListener(new Win_affair()); //监听者对象Win_affair()给ff1对象注册 ff2.setSize(300,200); ff2.setTitle("显示窗口2"); ff2.setVisible(true); ff2.addWindowListener(new Win_affair()); //监听者对象Win_affair()给ff2对象注册 } public static void main(String args[]) { new AWT11_13();

private class Win_affair extends WindowAdapter public void WindowOpened(WindowEvent e) { } public void WindowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { if(e.getSource()==ff1){//检查ff1是失活吗 ff1.setVisible(false); ff2.setVisible(true); } else { ff1.setVisible(true); ff2.setVisible(false); public void windowClosing(WindowEvent e){ System.exit(0);

JLabel构造方法 功能说明 JLabe() 创建一个空标签 JLabe(Icon icon) 创建一个图标为icon的标签 JLabe(Icon icon,int alignment) 创建图标为icon的标签,指定水平排列方式(如:left,center等) JLabe(String str) 创建一个含有str 文字的标签 JLabe(String str ,int alignment) 创建含有str文字并指定排列方式的标签 JLabe(String str,Icon icon,int alignment) 创建汉icon图标 str文字并指定排列方式的标签 JLabe方法 Icon getIcon() 获得此标签的图标 void setIcon(Icon icon) 设置标签的图标为icon String getText() 获得此标签的文字 void setText(String str() 设置标签的文字为str void setHorizontalAlignment(int alig) 设置整个标签的水平对齐方式 void setVerticalAlignment(int alig) 设置整个标签的垂直对齐方式 void setHorizontalTextPosition(int ps) 设置标签中文字的水平对齐位置 void set VerticalTextPosition(int ps) 设置标签中文字的垂直对齐位置

AbstractButton类 AbstractButton方法 功能说明 void addActionListener(ActionListene I) 注册监听者的类对象 void addChangeListener(ActionListene I) 改变监听者的类对象 Icon getIcon() 获得此按钮的图标 void setSelectIcon(Icon icon) 设置按钮的图标为icon String getText() 获得按钮上的文字 void setText(String str) 设置按钮上的文字为str void setEnabled(boolean b) 设置按钮是否禁用 boolean isSelected() 得到按钮的状态 void setRolloverIcon(Icon icon) 为按钮设置滚翻图标 在Swing中所有按钮都是由AbstractButton类派生的,它派生出两个组件JButton组件和JToggleButton组件。前者是按钮,后者是单选按钮和复选框的基类

JButton类的方法 JButton类的构造方法 功能说明 JButton() 创建一个按钮 JButton((Icon icon) JButton(String str) 创建一个包含有str文字的按钮 JButton(String str ,Icon icon) 创建既有图标icon又有文字str 的按钮

JToggleButton类的方法 JToggleButton类的构造方法 功能说明 JToggleButton() 创建一个无标签的按钮 JToggleButton(Icon icon) 创建一个图标为icon 的按钮 JToggleButton(Icon icon,boolean sele) 创建一个图标为icon 的按钮且初始态false JToggleButton(String str) 创建一个含文字str 文字的按钮 JToggleButton(String str,boolean sele) 创建一个含文字str 文字的按钮初态为false JToggleButton(String str,Icon icon) 创建一个含图标icon和文字str的按钮 JToggleButton(String str,Icon icon ,boolean sele) 创建一个含图标icon和文字str的按钮初态为false

// 创建标签和两个按钮,对于按钮事件定义了一个按钮是当单击按钮时 // 出现图像翻滚,另一个按钮是当单击按钮时弹出对话框 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class AWT11_14 extends JFrame { private JLabel label1,label2; private JButton but1,but2; public AWT11_14() { super(" 标签按钮测试窗口 Example"); //引用父类构造方法 Container c=getContentPane(); // 设置一个ContentPane容器对象 c.setLayout(new FlowLayout(100,100,10)); //选择窗口布局为FlowLayout Icon icon=new ImageIcon("125.gif"); label1=new JLabel("标签中有文字和图像",icon,SwingConstants.CENTER); // 设置标签中包含的文字、图像以及它的水平排列方式 label1.setToolTipText("这是标签");// label1.setHorizontalTextPosition(SwingConstants.CENTER); label1.setVerticalTextPosition(SwingConstants.BOTTOM); c.add(label1); //添加标签对象 Icon icon1=new ImageIcon("05.gif");//创建图形对象 Icon icon2=new ImageIcon("06.gif"); Icon icon3=new ImageIcon("10.gif"); but1=new JButton("按钮1"); c.add(but1);

but2=new JButton("按钮2 ",icon2); but2.setRolloverIcon(icon3); c.add(but2); but1.addActionListener(new listener()); but2.addActionListener(new listener()); setSize(360,200); show(); } public static void main(String args[]) { AWT11_14 app=new AWT11_14(); app.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e) {System.exit(0);} }); private class listener implements ActionListener {//定义listener类并实现监听程序 public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null,"You pressed:"+e.getActionCommand());

JCheckBox类的方法 JCheckBox类的构造方法 功能说明 JCheckBox() 创建一个无标签的复选框 JCheckBox (Icon icon) 创建一个图标为icon的复选框 JCheckBox(Icon icon,boolean sele) 创建一个图标为icon的复选框初态为false JCheckBox(String str) 创建一个含有文字的复选框 JCheckBox(String str ,boolean sele) 创建一个含有文字的复选框初态为false JCheckBox(String str, Icon icon) 创建一个含图标icon和文字的复选框 JCheckBox(String str, Icon icon,boolean sele) 创建一个含图标icon和文字的复选框初态为false 单选按钮JRadioButton类的构造方法与复选框的构造方法类似,故省略

// 创建单选按钮和复选框对象并实现其事件处理 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class AWT11_15 extends JFrame { private JTextField table1,table2; private Font plainFont,boldFont,italicFont,boldItalicFont;//设置字体对象 private JRadioButton plain,bold,italic,boldItalic;//设置单选按钮对象 private JCheckBox check1,check2; //设置复选框对象 private ButtonGroup radioGroup; //设置单选按钮对象 public AWT11_15() { super("设置单选按钮和复选框程序 Example"); //引用父类构造方法 Container c=getContentPane(); // 设置一个ContentPane容器对象 c.setLayout(new FlowLayout()); //选择窗口布局为FlowLayout table1=new JTextField("可以看到当选择不同选项时会发生变化 ",25); //创建文本框对象table 并设置它的长度和将文字赋给它 c.add(table1); //添加文本框 plain=new JRadioButton("Plain",true); //创建单选按钮选项并设置初值为true 表示选中 c.add(plain); //添加单选按钮 bold=new JRadioButton("Blod",false); c.add(bold); italic=new JRadioButton("Italic",false); c.add(italic);

boldItalic=new JRadioButton("Bold/Italic",false); c.add(boldItalic); plain.addItemListener(new handler1());//将监听者注册给plain对象 bold.addItemListener(new handler1()); italic.addItemListener(new handler1()); boldItalic.addItemListener(new handler1()); radioGroup=new ButtonGroup();//创建单选按钮组,建立相对关联 radioGroup.add(plain); radioGroup.add(bold); radioGroup.add(italic); radioGroup.add(boldItalic); plainFont=new Font("TimesRoman",Font.PLAIN,14); //引用Font类构造方法创建自定义字体对象,并设置对象为TimesRoman,大小是14 boldFont=new Font("TimesRoman",Font.BOLD,14); italicFont=new Font("TimesRoman",Font.ITALIC,14); boldItalicFont=new Font("TimesRoman",Font.BOLD+Font.ITALIC,14); table1.setFont(plainFont);//为文本框设置自定义字体对象 table2=new JTextField("使用复选框只改变字体式样 ",25); table2.setFont(new Font("TimesRoman",Font.PLAIN,14));//常规文字 c.add(table2); check1=new JCheckBox("Bold"); //创建复选框对象check1 c.add(check1); //添加复选框 check2=new JCheckBox(" Italic"); c.add(check2);

check1.addItemListener(new handler2()); setSize(300,180); show(); } //实现监听者的类接口方法 private class handler1 implements ItemListener{ public void itemStateChanged(ItemEvent e) { if(e.getSource()==plain)//获得事件源对象 table1.setFont(plainFont); else if(e.getSource()==bold) table1.setFont(boldFont); if(e.getSource()== italic) table1.setFont( italicFont); if(e.getSource()==boldItalic) table1.setFont(boldItalicFont); table1.repaint();//以新的字体更新文本框

private class handler2 implements ItemListener{ private int valBold=Font.PLAIN; private int valItalic=Font.PLAIN; public void itemStateChanged(ItemEvent e) { if(e.getSource()== check1) if(e.getStateChange()==ItemEvent.SELECTED) valBold=Font.BOLD; else valBold=Font.PLAIN; if(e.getSource()== check2) valBold=Font.ITALIC; table2.setFont(new Font("TimesRoman" ,valBold+valItalic,14)); table2.repaint();// 设置文本框字体以新的字体更新文本框 } } public static void main(String args[]) { AWT11_15 app=new AWT11_15();//创建Font11_8对象app // 同时会引用其构造方法,并执行类中规定的功能 app.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e) {System.exit(0);} }); } }

JComboBox类的方法 JComboBox类的构造方法 功能说明 JComboBox() 创建一个空的下拉列表框对象,可以使用addItem()方法添加选项 JComboBox(Vector vect) 使用向量表建立一个JComboBox对象 JComboBox(ComboBoxModel model) 从已有的model获得选项,创建JComboBox对象 JComboBox(Object items) 使用数组创建JComboBox对象 JComboBox viod add 注册事件对象给ActionListener对象 注册事件对象给ItemListener对象 为选项表添加选项 Object getItemAt(int index) 获得指定下标的列表项 int getItemCount() 获得列表中的选项数 int getSelectedItem() 获得当前选择的项

//创建下拉列表框并实现其事件处理 // import java.awt.*; import java.awt.event.*; import javax.swing.*; public class AWT11_16 extends JFrame { private JComboBox images; private JLabel label; private String names[]={"狗.gif","猴.gif","虎.gif","马.gif","鼠.gif","兔.gif"}; private Icon icons[]={new ImageIcon(names[0]), new ImageIcon(names[1]), new ImageIcon(names[2]),new ImageIcon(names[3]), new ImageIcon(names[4]),new ImageIcon(names[5])}; public AWT11_16() { super(" 下拉列表框显示图形文件 "); Container c=getContentPane(); c.setLayout(new FlowLayout()); images=new JComboBox(names); //创建下拉列表对象 images.setMaximumRowCount(3); //最多显示3行 images.addItemListener( //监听者注册给images对象 new ItemListener(){

public void itemStateChanged(ItemEvent e) { label.setIcon(icons[images.getSelectedIndex()]);} //根据 getSelectedIndex()方法的值得到下拉列表框的选项值 }); c.add(images); //添加下拉列表框对象 label=new JLabel(icons[0]); c.add(label); //加入标签对象 setSize(450,380); show(); } public static void main(String args[]){ AWT11_16 app=new AWT11_16(); app.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);

JList类的方法 JList类的构造方法 功能说明 JList() 创建一个空的JList对象 JList(Vector vect) 使用向量表创建一个JList对象 JList(Object items) 使用数组创建一个JList对象 JList void addListSelectionListener (ListSelectionListener e) 将事件监听者注册给 JList对象 int getSelectedIndex(int i) 获得从JList对象中选取的单个选项 int getSelectedIndices(int[] I) 获得从JList对象中选取的多个选项 void setVisibleRowCount(int num) 设置可见的列表选项 int getVisibleRowCount() 获得可见的列表选项值

//创建下拉列表框并实现其事件处理, 改编例11_16实现JList类的编程 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class AWT11_17 extends JFrame { private JList images; private JLabel label; private String names[]={"狗.gif","猴.gif","虎.gif","马.gif","鼠.gif","兔.gif"}; private Icon icons[]={new ImageIcon(names[0]), new ImageIcon(names[1]), new ImageIcon(names[2]),new ImageIcon(names[3]), new ImageIcon(names[4]),new ImageIcon(names[5])}; //创建图标数组对象icons[],其图标文件名对应字符串数组对象names[] public AWT11_17() { super(" 列表框显示图形文件 "); Container c=getContentPane(); c.setLayout(new FlowLayout()); images=new JList(names); //创建下拉列表对象 images.setVisibleRowCount(3); //最多显示3行 images.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); c.add(new JScrollPane(images)); //将对象放到JScrollPane容器中

label=new JLabel(icons[0]); c.add(label); //加入标签对象 images.addListSelectionListener(new ListSelectionListener(){ //监听者注册给images对象,创建ListSelectionListener()类对象 public void valueChanged(ListSelectionEvent e ) { label.setIcon(icons[images.getSelectedIndex()]);} //根据getSelectedIndex()方法的值得到下拉列表框的选项值 }); setSize(340,450); show(); } public static void main(String args[]){ AWT11_16 app=new AWT11_16(); app.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);

JTextField类的方法 JTextField类的构造方法 功能说明 JTextField() 创建一个空的JTextField对象 JTextField(int n) 创建一个n列宽的JTextField对象 JTextField(String str) 创建一个JTextField对象并用str赋值 JTextField(String str ,int n) 创建一个n列JTextField对象并用str赋值 JTextField类的方法 void addActionListener (ActionListener e) 将监听者注册给JTextField对象 int getColumns() 获得对象的列数 void setgetColumns(int columns) 设置对象的列数 void setFont(Font font) 设置JList对象中文字的字体 void setHorizontalAlignment(int align) 设置JList对象中文字的字体水平对齐方式

JTextArea类的构造方法 功能说明 JTextArea() 创建一个空的JTextArea对象 JTextArea(int m,int n) 创建一个m行n列的JTextArea对象 JTextArea(String str) 创建一个JTextArea对象并指定输入文字 JTextArea(String str,int m,intn) 创建一个有上述两个功能的JTextArea对象 JTextArea(Document doc,String str,int n) 创建一个使用指定存储模式的JTextArea对象并对定义对象的列宽和指定文字 JTextArea类的方法 void setFont(Font font) 设置字体 void insert(String str,int position) 在指定位置插入给定文字 void append(String str) 在文本的末尾插入指定文字 void replaceRange(String str,int start,int end) 将给定范围内的文本用指定的文字替换 int getLineCount() 获得文本区域包含的行数 int getRows() 获得对象的行数 void setRows(int rows) 设置对象的行数 int getColumns() 获得对象的列数 Void setColumns(int columns) 设置对象的列数

//创建文本框和文本域并实现其事件处理 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class AWT11_18 extends JFrame { private JTextField text1; private JTextArea t1; private JLabel lb11,lb12; public AWT11_18() { super("文本框和文本域测试程序 "); Container c=getContentPane(); c.setLayout(new FlowLayout()); lb11=new JLabel("在文本框中输入文本内容 "); c.add(lb11); text1=new JTextField(15); c.add(text1); text1.addActionListener(new handler());//监听着注册给text1对象 String s="这是一个字符串演示文本\n"; t1=new JTextArea(s,11,15); c.add(t1); setSize(350,300); show(); }

public static void main(String args[]){ AWT11_18 app=new AWT11_18(); app.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); private class handler implements ActionListener{ public void actionPerformed(ActionEvent e) {//此方法响应事件 String s=" "; if(t1.getLineCount()<10){ //判断文字区域的当前行数是否小于10行,如果是继续输入文字 s=text1.getText();//获得输入的文本内容 t1.append(s+"\n");//将获得的文本加到文本域 else //行数大于10,输出提示信息 JOptionPane.showMessageDialog(null,"输入内容太多,请删除部分内容"); text1.setText(""); // 将文本清空

JProgressBar的方法 JProgressBar 类的构造方法 功能说明 JProgressBar() 创建一个水平进度条 void addChangeListener (ChangeListener e) 监听者注册给进度条对象,实现ChangeListener类的方法 int getMaxmum() 获得进度条最大值 int getMinmum() 获得进度条最小值 int getVakue() 获得进度条当前值 int setMaxmum() 设置进度条最大值 int setMinmum() 设置进度条最小值 int setVakue() 设置进度条当前值

//创建进度条并实现其事件处理 // import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class AWT11_19 extends JFrame { private JProgressBar bar; private JButton but; private Container c; private JLabel label; public AWT11_19() super("进度条演示程序 "); c=getContentPane(); c.setLayout(new FlowLayout()); bar=new JProgressBar(); but=new JButton(" 执行演示 "); c.add(but); bar.setForeground(Color.blue); c.add(bar); label=new JLabel();

but.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { if(bar.getValue()!=bar.getMaximum()) bar.setValue(bar.getValue()+10); else bar.setValue(bar.getMinimum()); } }); but.addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e){ label.setText("Progress bar minimum:"+bar.getMinimum() +"Maxmun"+bar.getMaximum()+"Value:"+bar.getValue()); //显示进度状态 } setSize(350,150); show(); public static void main(String args[]){ AWT11_19 app=new AWT11_19(); app.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } });

练习与习题 1、如何来制作图形界面?它需要引入哪些包? 2、分别使用AWT包和swing 包制作标签和按钮,试说出它们的区别? 3、在java中,什么是事件?简述处理事件的机制。 4、说明JCheckBox和JRadioButton的区别/ 5、设计一个包含有文本框和标签的窗口,在文本框中输入一段文字按回车键后,使这段文字内容加到标签的文字框中。 6、试用下拉列表框实现学校和地址的对应关系? 7、说明JTextField和JTextArea之间的区别?编制一个程序来实现在JTextField对象中输入字符,单击按钮将其复制到JTextArea对象中。 8、使用AWT包调用Font字体,改变标签中的文本字体。 9、编制一个使用JList组件实现第5题中的要求。