第9章 Java事件处理
Java编程基础及应用(第2版)教学课件第9章Java多线程机制
现代操作系统可以同时管理 一个计算机系统中的多个进程, 即可以让计算机系统中的多个进 程轮流使用CPU资源。
§9.1.2 进程与线程
线程是比进程更小的执行 单位,一个进程在其执行过程 中,可以产生多个线程,形成 多条执行线索,每条线索,即 每个线程也有它自身的产生、 存在和消亡的过程。
例题1
§9.2.3 线程调度与优先级
处于就绪状态的线程首先进入就绪队列排队等候 CPU资源,同一时刻在就绪队列中的线程可能有多个。 Java虚拟机(JVM)中的线程调度器负责管理线程, 调度器把线程的优先级分为10个级别,分别用Thread 类中的类常量表示。
Java 调 度 器 的 任 务 是 使 高 优 先 级 的 线 程 能 始 终 运 行 , 一旦时间片有空闲,则使具有同等优先级的线程以轮流 的方式顺序使用时间片。
5.currentThread():该方法是Thread类中的类方法,可以用类名调用,该方法
返回当前正在使用CPU资源的线程。
6.interrupt() :一个占有CPU资源的线程可以让休眠的线程调用interrupt()方
法“吵醒”自己,即导致休眠的线程发生InterruptedException异常,从而结束休眠, 重新排队等待CPU资源。
例子5
例子5中有两个线程:会计和出纳,他俩共同拥有一个帐本。 他俩都可以使用saveOrTake(int amount)方法对帐本进行访问, 会计使用saveOrTake(int amount)方法时,向帐本上写入存钱记 录;出纳使用saveOrTake(int amount)方法时,向帐本写入取钱 记录。因此,当会计正在使用saveOrTake(int amount)时,出纳 被禁止使用,反之也是这样。
JAVA第9章 输入输出课件
9.2.5 小文件的读写
• Files类提供了从一个较小的二进制文件和文 本文件读取和写入的方法。readAllBytes() 方法和readAllLines()方法分别是从二进制 文件和文本文件读取。这些方法可以自动打 开和关闭流,但不能处理大文件。
9.2.5 小文件的读写
• public static byte[] readAllBytes(Path path):从指定的二进制文件中读取所有字 节。
9.2 Files类操作
• java.nio.类是一个功能非常强大的类。 • 该类定义了大量的静态方法用来读、写和
操纵文件和目录。Files类主要操作Path对 象。
9.2.1 创建和删除目录和文件
• public static Path createDirectory(Path dir, <?>…attrs)
= ();
1. 类
• Path getPath(String first, String …more) • String getSeparator() • Iterable<Path> getRootDirectores() • boolean isOpen() • boolean isReadOnly()
• static Path setOwner(Path path, UserPrincipal) :设置指定文件的所有者。
9.2.2 文件属性操作
• 下面程序演示了Files类几个方法的使用。 • 程序9.1
R u n
9.2.3 文件和目录的复制与移动
• 使用Files类的copy()方法可以复制文件和 目录,使用move()方法可以移动目录和文 件。copy()方法的一般格式为: public static Path copy( Path source, Path target, CopyOption…options)
第九章-数据结构教程(Java语言描述)-李春葆-清华大学出版社
描述
使用其它模块的核心非图形类
图形用户界面(GUI)组件的基础类,包括OpenGL
处理音频、视频、广播、摄像头功能的类
使网络编程更容易,更方便的类
QML和JavaScript的类
自定义用户界面构建高度动态的应用程序的声明性框架
使用SQL集成数据库的类
表9-1 Qt基本模块组成
进行Qt应用程序和I函数和直观的C++ 类库 (3)支持 2D/3D 图形渲染,支持 OpenGL (4)具有跨平台 IDE 的集成开发工具
(5)跨桌面和嵌入式操作系统的移植性
(6)大量的开发文档
(7)国际化
按不同的版本发行: Qt商业版:提供给商业软件开发。它们提供传 统商业软件发行版并且提供在协议有效期内的 免费升级和技术支持服务。 Qt开源版:仅仅为了开发自由和开放源码软件, 提供了和商业版本同样的功能。GNU通用公共 许可证下,它是免费的。
第9章 QT图形界面应用程序开发基础
目录
9.1 Qt简介 9.2 Qt5概述 9.3 信号和插槽机制 9.4 Qt程序设计 9.5 Qt数据库应用
与普通GUI不同的是,嵌入式GUI的要求是轻量 级的,如在嵌入式linux中使用的图形界面系统。 同时嵌入式GUI还具有可定制,高可靠性,可裁 减性等特点。嵌入式GUI的开发系统主要有X Window、MiniGUI、OpenGL、Qt等。
9.1 Part One
Qt简介
Qt是一个跨平台应用程序和图形用户界面GUI 开发框架。使用 Qt 只需一次性开发应用程序, 无须重新编写源代码,便可跨不同桌面和嵌入 式操作系统部署这些应用程序。
Qt是挪威Trolltech公司的标志性产品,于1991 年推出。2008年,Trolltech被诺基亚公司收购, QT也因此成为诺基亚旗下的编程语言工具。 2012年8月芬兰IT业务供应商Digia全面收购诺 基亚Qt业务及其技术。
《java2实用教程》(第四版)课后答案 第九章-第十三章
Java作业4(第九章---第十三章)第九章3.1.1程序代码import java.awt.*;import javax.swing.event.*;import javax.swing.*;import java.awt.event.*;public class kehou31 {public static void main(String args[]) {Computer fr=new Computer();}}class Computer extends JFrame implements DocumentListener { JTextArea text1,text2;int count=1;double sum=0,aver=0;Computer() {setLayout(new FlowLayout());text1=new JTextArea(6,20);text2=new JTextArea(6,20);add(new JScrollPane(text1));add(new JScrollPane(text2));text2.setEditable(false);(text1.getDocument()).addDocumentListener(this);setSize(300,320);setVisible(true);validate();setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}public void changedUpdate(DocumentEvent e) {String s=text1.getText();String []a =s.split("[^0123456789.]+");sum=0;aver=0;for(int i=0;i<a.length;i++) {try { sum=sum+Double.parseDouble(a[i]);}catch(Exception ee) {}}count=a.length;aver=sum/count;text2.setText(null);text2.append("\n和:"+sum);text2.append("\n平均值:"+aver);}public void removeUpdate(DocumentEvent e){changedUpdate(e); }public void insertUpdate(DocumentEvent e){changedUpdate(e);}}3.1.2 运行界面3.2.1程序代码import java.awt.*;import javax.swing.event.*;import javax.swing.*;import java.awt.event.*;public class kehou932 {public static void main(String args[]) {ComputerFrame fr=new ComputerFrame();fr.setBounds(100,100,650,120);fr.setTitle("多功能计算器");fr.setBackground(Color.blue);}}class ComputerFrame extends JFrame implements ActionListener {JTextField text1,text2,text3;JButton buttonAdd,buttonSub,buttonMul,buttonDiv;JLabel label;public ComputerFrame() {setLayout(new FlowLayout());text1=new JTextField(10);text2=new JTextField(10);text3=new JTextField(10);label=new JLabel(" ",JLabel.CENTER);label.setBackground(Color.green);add(text1);add(label);add(text2);add(text3);buttonAdd=new JButton("加");buttonSub=new JButton("减");buttonMul=new JButton("乘");buttonDiv=new JButton("除");add(buttonAdd);add(buttonSub);add(buttonMul);add(buttonDiv);buttonAdd.addActionListener(this);buttonSub.addActionListener(this);buttonMul.addActionListener(this);buttonDiv.addActionListener(this);setSize(300,320);setVisible(true);validate();setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); }public void actionPerformed(ActionEvent e) {double n;if(e.getSource()==buttonAdd) {double n1,n2;try{ n1=Double.parseDouble(text1.getText()); n2=Double.parseDouble(text2.getText()); n=n1+n2;text3.setText(String.valueOf(n));label.setText("+");}catch(NumberFormatException ee){ text3.setText("请输入数字字符");}}else if(e.getSource()==buttonSub) {double n1,n2;try{ n1=Double.parseDouble(text1.getText()); n2=Double.parseDouble(text2.getText()); n=n1-n2;text3.setText(String.valueOf(n));label.setText("-");}catch(NumberFormatException ee){ text3.setText("请输入数字字符");}}else if(e.getSource()==buttonMul){double n1,n2;try{ n1=Double.parseDouble(text1.getText()); n2=Double.parseDouble(text2.getText()); n=n1*n2;text3.setText(String.valueOf(n));label.setText("*");}catch(NumberFormatException ee){ text3.setText("请输入数字字符");}}else if(e.getSource()==buttonDiv){double n1,n2;try{ n1=Double.parseDouble(text1.getText()); n2=Double.parseDouble(text2.getText()); n=n1/n2;text3.setText(String.valueOf(n));label.setText("/");}catch(NumberFormatException ee){ text3.setText("请输入数字字符");}}validate();}}3.2.2运行界面3.3.1 程序代码import java.awt.*;import java.awt.event.*;import javax.swing.*;public class kehou933 {public static void main(String args[]){Window win = new Window();win.setTitle("使用MVC结构");win.setBounds(100,100,420,260);}}class Window extends JFrame implements ActionListener { Lader lader; //模型JTextField textAbove,textBottom,textHeight; //视图 JTextArea showArea; //视图JButton controlButton; //控制器Window() {init();setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}void init() {lader = new Lader();textAbove = new JTextField(5);textBottom = new JTextField(5);textHeight = new JTextField(5);showArea = new JTextArea();controlButton=new JButton("计算面积");JPanel pNorth=new JPanel();pNorth.add(new JLabel("上底:"));pNorth.add(textAbove);pNorth.add(new JLabel("下底:"));pNorth.add(textBottom);pNorth.add(new JLabel("高:"));pNorth.add(textHeight);pNorth.add(controlButton);controlButton.addActionListener(this);add(pNorth,BorderLayout.NORTH);add(new JScrollPane(showArea),BorderLayout.CENTER);}public void actionPerformed(ActionEvent e) {try{double above = Double.parseDouble(textAbove.getText().trim());double bottom = Double.parseDouble(textBottom.getText().trim());double height = Double.parseDouble(textHeight.getText().trim());lader.setAbove(above) ;lader.setBottom(bottom);lader.setHeight(height);double area = lader.getArea();showArea.append(" 梯形的面积:"+area+"\n");}catch(Exception ex) {showArea.append("\n"+ex+"\n");}}}class Lader {double above,bottom,height;public double getArea() {double area = (above+bottom)*height/2.0;return area;}public void setAbove(double a) {above = a;}public void setBottom(double b) {bottom = b;}public void setHeight(double c) {height = c; }}3.3.2运行界面第十章4.1.1程序代码import java.io.*;public class E {public static void main(String args[]) {File f=new File("E.java");;try{ RandomAccessFile random=new RandomAccessFile(f,"rw");random.seek(0);long m=random.length();while(m>=0) {m=m-1;random.seek(m);int c=random.readByte();if(c<=255&&c>=0)System.out.print((char)c);else {m=m-1;random.seek(m);byte cc[]=new byte[2];random.readFully(cc);System.out.print(new String(cc));} }}catch(Exception exp){} }}4.1.2运行界面4.2.1程序代码import java.io.*;public class E {public static void main(String args[ ]) {File file=new File("E.java");File tempFile=new File("temp.txt");try{ FileReader inOne=new FileReader(file);BufferedReader inTwo= new BufferedReader(inOne);FileWriter tofile=new FileWriter(tempFile);BufferedWriter out= new BufferedWriter(tofile);String s=null;int i=0;s=inTwo.readLine();while(s!=null) {i++;out.write(i+" "+s);out.newLine();s=inTwo.readLine();}inOne.close();inTwo.close();out.flush();out.close();tofile.close();}catch(IOException e){}}}4.3.1程序代码import java.io.*;import java.util.*;public class kehou1043 {public static void main(String args[]) {File file = new File("a.txt");Scanner sc = null;double sum=0;int count = 0;try { sc = new Scanner(file);eDelimiter("[^0123456789.]+");while(sc.hasNext()){try{ double price = sc.nextDouble(); count++;sum = sum+price;System.out.println(price);}catch(InputMismatchException exp){String t = sc.next();}}System.out.println("平均价格:"+sum/count); }catch(Exception exp){System.out.println(exp);}}}4.3.2运行界面第十一章2.1.1程序代码import java.sql.*;import java.util.*;public class kehou1121 {public static void main(String args[]) {Query query=new Query();String dataSource="myData";String tableName="goods";Scanner read=new Scanner(System.in);System.out.print("输入数据源名:");dataSource = read.nextLine();System.out.print("输入表名:");tableName = read.nextLine();query.setDatasourceName(dataSource);query.setTableName(tableName);query.setSQL("SELECT * FROM "+tableName);query.inputQueryResult();}}class Query {String datasourceName=""; //数据源名String tableName=""; //表名String SQL; //SQL语句public Query() {try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }catch(ClassNotFoundException e) {System.out.print(e);}}public void setDatasourceName(String s) {datasourceName = s.trim();}public void setTableName(String s) {tableName = s.trim();}public void setSQL(String SQL) {this.SQL = SQL.trim();}public void inputQueryResult() {Connection con;Statement sql;ResultSet rs;try {String uri = "jdbc:odbc:"+datasourceName;String id = "";String password = "";con = DriverManager.getConnection(uri,id,password);DatabaseMetaData metadata = con.getMetaData();ResultSet rs1 = metadata.getColumns(null,null,tableName,null);int字段个数 = 0;while(rs1.next()) {字段个数++;}sql = con.createStatement();//创建SQL语句rs = sql.executeQuery(SQL);//执行SQL语句while(rs.next()) {for(int k=1;k<=字段个数;k++) {System.out.print(" "+rs.getString(k)+" ");}System.out.println("");}con.close();}catch(SQLException e) {System.out.println("请输入正确的表名"+e);}}}2.1.2运行界面2.2.1程序代码import java.sql.*;import java.util.*;public class kehou1122 {public static void main(String args[]) {Q query = new Q();String dataSource = "myData";String tableName = "goods";query.setDatasourceName(dataSource);query.setTableName(tableName);String name = "";Scanner read=new Scanner(System.in);System.out.print("商品名:");name = read.nextLine();String str="'%["+name+"]%'";String SQL = "SELECT * FROM "+tableName+" WHERE name LIKE "+str; query.setSQL(SQL);System.out.println(tableName+"表中商品名是"+name+"的记录");query.inputQueryResult();}}class Q {String datasourceName=""; //数据源名String tableName=""; //表名String SQL; //SQL语句public Q() {try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e) {System.out.print(e);}}public void setDatasourceName(String s) {datasourceName = s.trim();}public void setTableName(String s) {tableName = s.trim();}public void setSQL(String SQL) {this.SQL = SQL.trim();}public void inputQueryResult() {Connection con;Statement sql;ResultSet rs;try {String uri = "jdbc:odbc:"+datasourceName;String id = "";String password = "";con = DriverManager.getConnection(uri,id,password);DatabaseMetaData metadata = con.getMetaData();ResultSet rs1 = metadata.getColumns(null,null,tableName,null);int字段个数 = 0;while(rs1.next()) {字段个数++;}sql = con.createStatement();rs = sql.executeQuery(SQL);while(rs.next()) {for(int k=1;k<=字段个数;k++) {System.out.print(" "+rs.getString(k)+" ");}System.out.println("");}con.close();}catch(SQLException e) {System.out.println("请输入正确的表名"+e);}}}2.2.2运行界面2.3.1程序代码import java.sql.*;import java.util.*;public class kehou1123 {public static void main(String args[]) {Q1 query = new Q1();String dataSource = "myData";String tableName = "goods";query.setDatasourceName(dataSource);query.setTableName(tableName);String SQL = "SELECT * FROM "+tableName+" ORDER BY madeTime";query.setSQL(SQL);System.out.println(tableName+"表记录按商品生产日期前后排序是: "); query.inputQueryResult();}}class Q1 {String datasourceName=""; //数据源名String tableName=""; //表名String SQL; //SQL语句public Q1() {try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e) {System.out.print(e);}}public void setDatasourceName(String s) {datasourceName = s.trim();}public void setTableName(String s) {tableName = s.trim();}public void setSQL(String SQL) {this.SQL = SQL.trim();}public void inputQueryResult() {Connection con;Statement sql;ResultSet rs;try {String uri = "jdbc:odbc:"+datasourceName;String id = "";String password = "";con = DriverManager.getConnection(uri,id,password);DatabaseMetaData metadata = con.getMetaData();ResultSet rs1 = metadata.getColumns(null,null,tableName,null);int字段个数 = 0;while(rs1.next()) {字段个数++;}sql = con.createStatement();rs = sql.executeQuery(SQL);while(rs.next()) {for(int k=1;k<=字段个数;k++) {System.out.print(" "+rs.getString(k)+" ");}System.out.println("");}con.close();}catch(SQLException e) {System.out.println("请输入正确的表名"+e);}}}2.3.2运行界面第十二章4.1.1程序代码public class kehou1241{public static void main(String args[]) {Cinema a=new Cinema();a.zhang.start();a.sun.start();a.zhao.start();}}class TicketSeller //负责卖票的类。
[java入门学习]第 9 章 Java输入输出操作
第九章 Java输入输出操作9.1 Java 输入输出流所有的程序语言都提及与本机文件系统交互的方式;Java也不例外。
我们将看看Java 是怎样处理标准文件输入输出的(包括stdin,stout,stderr)。
当你在网络上开发小程序时,你必须注意直接文件输入输出是不安全因素的关键。
大多数用户设置他们的浏览器,可让你自由的访问他们的文件系统,但有的不让你访问。
当然,如果你开发你内部的应用程序,你也许需要直接访问文件。
标准输入输出Unix的用户,或其他基于命令行系统的用户(如DOS),都知道标准输入输出的含义。
标准输入文件是键盘,标准输出文件是你的终端屏幕。
标准错误输出文件也指向屏幕,如果有必要,它也可以指向另一个文件以便和正常输出区分。
系统类Java通过系统类达到访问标准输入输出的功能。
上面提到的三个文件在这个系统类中实现:Stdin System.in作为InputStream类的一个实例来实现stdin,你可以使用read()和skip(long n)两个成员函数。
read()让你从输入中读一个字节,skip(long n)让你在输入中跳过n个字节。
Stout System.out作为PrintStream来实现stdout,你可以使用print()和println()两个成员函数。
这两个函数支持Java的任意基本类型作为参数。
Stderr System.err同stdout一样实现stderr。
象System.out一样,你可以访问PrintStream 成员函数。
9.2 标准输入输出例子import java.io.* class myCat{public void main(String args[]) throws IOException{int b;int count = 0;while ((b = System.in.read()) != -1){count++;System.out.print((char)b);}System.out.println(); //blank line System.err.println("counted"+count+"total bytes.");}}9.3 普通输入输出类除了基本的键盘输入和屏幕输出外,我们还需要联系文件的输入输出。
Java游戏编程原理与实践教程课件 第9章--陈锐 夏敏捷主编
9.2 程序设计的思路 游戏中动态生成一个大小3*3的图片按钮数组cells。将图片 woman.jpg分割成行列数3*3的小图片,并按顺序编号;每个 图片按钮显示一副小图片,其位置成员place存放用0,1,2 到8的数,代表正确位置编号。注意最后一个图片按钮显示 的是空白信息图片“9.jpg”而位置成员place存放8。 游戏开始时,随机打乱这个图片按钮数组cells,根据玩家用 鼠标点击,来交换图片按钮数组cells对应按钮与空白图片按 钮位置,判断按钮数组cells所有元素的位置成员place是否有 序来判断是否已经完成游戏。
Java游戏编程原理与实践教程
主编 陈锐 夏敏拼图游戏
在“游戏”中,拼块以随机顺序排列,网格上有一个位置是 空的。完成拼图的方法是利用这个空位置移动拼块,玩家用 鼠标点击空位置周围拼块来交换它们位置,直到所有拼块都 回到原位置。拼图游戏运行结果如图9-1。
游戏界面和相关图片素材
现成分割好的图片1.jpg,2.jpg,…..9.jpg
图片块上单击事件中,通过e.getSource()获取触发事件的对象cell,与空白图片块 cellBlank进行位置比较,从而决定被单击对象cell和空白图片块cellBlank移动方向。 public void mouseClicked(MouseEvent e) { Cell cell = (Cell) e.getSource();// 获取触发事件的对象 int x = cellBlank.getX();// 获取空白图片块x坐标 int y = cellBlank.getY();// 获取空白图片块y坐标 if ((x - cell.getX()) == Cell.IMAGEWIDTH && cell.getY() == y) { cell.move(Direction.RIGHT);// 向右移动 cellBlank.move(Direction.LEFT); } else if ((x - cell.getX()) == -Cell.IMAGEWIDTH && cell.getY() == y) { cell.move(Direction.LEFT);// 向左移动 cellBlank.move(Direction.RIGHT); } else if (cell.getX() == x && (cell.getY() - y) == Cell.IMAGEWIDTH) { cell.move(Direction.UP);// 向上移动 cellBlank.move(Direction.DOWN); } else if (cell.getX() == x && (cell.getY() - y) == -Cell.IMAGEWIDTH) { cell.move(Direction.DOWN);// 向下移动 cellBlank.move(Direction.UP); }
JavaScript从入门到精通(第3版)
8.1 IE浏览器内建的错误报告 8.2处理异常 8.3 JavaScript语言调试技巧 8.4小结 8.5实践与练习
第9章事件处理
第10章文档 (document)对象
第11章文档对象模型 (DOM对象)
第12章 window窗口 对象
第13章级联 样式表
第14章表单 和表单元素
9.1事件与事件处理概述 9.2 DOM事件模型 9.3鼠标键盘事件 9.4页面相关事件 9.5表单相关事件 9.6滚动字幕事件 9.7编辑事件 9.8小结 9.9实践与练习
21.1同源策略 21.2 Internet Explorer安全区域 21.3 JavaScript代码安全 21.4 JavaScript加密 21.5小结 21.6实践与练习
22.1当下谁在用Ajax 22.2 Ajax开发模式与传统开发模式的比较 22.3 Ajax技术特点 22.4 Ajax使用的技术 22.5应用Ajax需要注意的几个问题 22.6 Ajax新技术—XMLHttpRequest对象 22.7 Ajax的重构 22.8小结 22.9实践与练习
23.1 jQuery概述 23.2 jQuery下载与配置 23.3 jQuery的插件 23.4 jQuery选择器 23.5 jQuery控制页面 23.6 jQuery的事件处理 23.7 jQuery的动画效果 23.8小结 23.9实践与练习
24.1 React简介 简介 24.3小结 24.4实践与练习
5.1 JavaScript内部对象 5.2对象访问语句 5.3 JavaScript中的数组 5.4小结 5.5实践与练习
6.1 String对象 6.2数值处理对象 6.3小结 6.4实践与练习
7.1正则表达式基础 7.2正则表达式语法 7.3 RegExp对象 7.4 String对象中的模式匹配方法 7.5小结 7.6实践与练习
第9章Java Swing图形用户界面-Java面向对象程序设计教程-微课视频-程杰-清华大学出版社
9.1 Java Swing概述 9.2 JFrame窗口 9.3布局管理器 9.4 常用控件 9.5事件处理机制 9.6 JDialog对话框 9.7 应用实例:打地鼠小游戏
通过GUI(Graphic User Interface,图形用户界 面),用户与程序之间可以方便地进行交互。Java 的java.awt包,即Java抽象窗口工具包(Abstract Window Toolkit,AWT)提供了许多用来设计GUI 的组件类。Java早起进行用户界面设计时,主要使 用java.awt包提供的类,如Button(按钮)、 TextField(文本框)和List(列表)等。JDK1.2 推出后,增加了一个新的javax.swing包,该包提 供了功能更为强大的用来设计GUI的类。
Javax.swing包提供了Box类,该类也是Container
类的一个子类,创建的容器称为一个盒式容器,盒 式容器的默认布局是盒式布局,而且不允许更改盒 式容器的布局。因此,在策划程序的布局时,可以 利用容器的嵌套,将摸个容器嵌入几个盒式ng中提供了一个更加强大的布 局——弹簧布局SpringLayout。利用该布局管理器
管理组件,当改变窗体的大小时,能够在不改变组 件间相对位置的前提下自动调整组件的大小。
9.4.1 标签JLable 9.4.2 文本框JTextField 9.4.3 按钮JButton 9.4.4 菜单JMenu 9.4.5文本区JTextArea 9.4.6下拉列表JList 9.4.7表格JTable 9.4.8 树JTree
Public void keyTyped(KeyEvent),键盘按键被输入 事件。
无论用户界面设计的如何美观别致,最重要的一点 是知道这些组件能做什么,如单击一个“打开文件” 按钮,我们希望打开的是文件对话框,而不希望程 序没有任何响应。Java提供了事件模型,使Swing
第九章 Java语言网络编程
二、URL编程 编程
1. 获取网络属性信息 在Java语言中,通过URL类的getFile()、getHost()、 getPort()、getProtocol()、getRef()等方法可以获取一个网站的 属性信息。 2. 创建输入流 创建输入流(InputStream)对象 对象 java.io包中InputStream输入流类是一抽象类,作为其他输 入流类的基类,对应着读取字节流信息的基本接口,提供了其 所有子类都能调用的方法。
二、URL编程 编程
5. AppletContext接口类 接口类 AppletContext类是一个接口类,Applet小程序通过 AppletContext接口与环境进行通讯。利用这个类可以从运行 Applet小程序的环境中获取信息,而这个环境一般是指浏览 器。AppletContext类没有构造方法,但是可以通过Applet类 中的getAppletContext()方法获取AppletContext接口,使用 Applet类中showStatus()方法可以在浏览器的状态条中显示 提示信息,使用showDocument()方法可以通知浏览器在指定 窗口中显示另一个URL的内容。
09 第9章 组合模式(Java)
Composite operation () add (Component c) remove (Component c) getChild (int i) ...
children
Page 7
组合模式
模式结构
组合模式包含如下角色: 组合模式包含如下角色: Component: 抽象构件 Leaf: 叶子构件 Composite: 容器构件 Client: 客户类
Page 11
组合模式
模式分析
典型的叶子构件角色代码: 典型的叶子构件角色代码:
public class Leaf extends Component { public void add(Component c) { //异常处理或错误提示 } public void remove(Component c) { //异常处理或错误提示 } public Component getChild(int i) { //异常处理或错误提示 } public void operation() { //实现代码 } } Page 12
组合模式
public class Composite extends Component { private ArrayList list = new ArrayList();
public void 模式分析 add(Component c) {
典型的容器构件角色代码: 典型的容器构件角色代码: }
Page 10
组合模式
模式分析
典型的抽象构件角色代码: 典型的抽象构件角色代码:
public abstract class Component { public abstract void add(Component c); public abstract void remove(Component c); public abstract Component getChild(int i); public abstract void operation(); }
Java应用教程_09Chapter
protocol:resourceName
URL举例 举例: 举例
/ /home/welcome.html http:///developers/
2011年1月22日星期六 年 月 日星期六
2011年1月22日星期六 年 月 日星期六
9.1 Java网络编程基础
TCP/UDP协议 TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。 IP协议 IP协议(Internet Protocol)又称互联网协议,是 支持网间互连的数据报协议,它与TCP协议(传输 控制协议)一起构成了TCP/IP协议族的核心。
2011年1月22日星期六 年 月 日星期六
9.2.2 URL类中获取对象特征的方法 URL类中获取对象特征的方法
URL类中一些很基本的方法如下: public final Obect getContent(); //这个方法取得传输 协议。 public String getFile(); //这个方法取得资源的文件名。 public String getHost(); //这个方法取得机器的名称。 public int getPort(); //这个方法取得端口号。 public String getProtocol(); //这个方法取得传输协议。 public String toString(); //这个方法把URL转化为字 符串
2011年1月22日星期六 年 月 日星期六
IP地址 IP地址
JAVA WEB第9章 JAVABEAN介绍
轻松一刻:趣解 JavaBean
00238
JavaBean 可以理解了为一个容器,里面可以装很多东西。用户可以很方便取出物品, 也可以放入物品,甚至可以达到放入物品 A,取出物品 B 的效果。例如,把 JavaBean 看 作一台冰箱,我们可以把水果放到保鲜层中保鲜,等想吃的时候就取出来,这样味道会 更好,另外,我们也可以把白开水放到冷冻层中冻成冰块,等想吃冰块时,再取出来。
Java Web 视频学编程
9.1 JavaBean 介绍
视频录像:光盘\MR\Video\9\JavaBean 介绍.exe 在 JSP 网页开发的初级阶段,并没有框架与逻辑分层概念的产生,需要将 Java 代码嵌 入到网页之中,对 JSP 页面中的一些业务逻辑进行处理,如字符串处理、数据库操作等, 其开发流程如图 9.1 所示。
return userName + ",你好!" ; } // 设置用户 public void setUserName(String userName) {
第9章 异常处理
finally用处:用于非内存的系统资源的释放,如 打开的文件、建立的网络连接等
Exception类
Exception类处于ng包中 构造函数
Exception() Exception(String 异常描述)
方法
String getMessage() 返回异常描述。 String toString() 返回异常对象详细信息。 void printStackTrace() 打印异常发生的路径,即引起异常的方法调用嵌套序 列。
利用throws向上转移检查异常
对于检查异常,也可以不用try…catch进行处理,在方法 的声明处用throws声明对应的检查异常,就可将它们转 给上层调用者去处理。 如果调用语句可能会抛出多种检查异常,throws关键字 后就要写上对应的多个检查异常类的名称,每个名称之 间用逗号(,)分开,如下所示: 返回类型 方法名(参数列表) throws 异常类1,异常类2,…{ 抛出检查异常的语句 } throws声明的异常类和抛出的异常实例之间遵循类型匹 配原则,可以用一个Exception类代替书写多个具体的异 常类
若try块中出现异常抛出,则控制转向下面catch 处理部分,然后执行后续语句。 若try块中没有异常抛出,则try块执行完,控制转 向后续语句。
catch语句
一个try语句可跟随多个catch语句,用以处理多种异常。 如下所示: try { . . . } catch( 异常类1 e1) { . . . } catch( 异常类2 e2) { . . . } 在try语句块执行时,如果发生异常,系统将构造对应的 异常类对象,在catch语句组中寻找和该对象类型相匹配 的catch语句,然后转向该语句块进行执行 匹配规则:
第9章 GUI_补充案例
第九章GUI案例9-1 AWT事件处理机制一、案例描述1、考核知识点编号:00109002名称:AWT事件处理机制2、练习目标掌握如何使用AWT事件处理机制3、需求分析事件处理机制专门用于响应用户的操作,比如,想要响应用户的点击鼠标、按下键盘等操作,就需要使用AWT的事件处理机制。
为了让初学者熟悉AWT的事件处理机制,本案例将实现关闭一个窗口的功能。
4、设计思路(实现原理)1)编写类Example012)建立一个窗体,名为“第一个窗体”3)定义一个类MyWindowListener实现事件监听器的接口WindowListener。
4)通过addWindowListener()方法为事件源注册事件监听器对象。
二、案例实现import java.awt.*;import java.awt.event.*;public class Example01 {public static void main(String[] args) {// 建立新窗体Frame f = new Frame("第一个窗体!");// 设置窗体的宽和高f.setSize(300, 300);// 设置窗体的出现的位置f.setLocation(300, 200);// 设置窗体可见f.setVisible(true);// 为窗口组件注册监听器MyWindowListener mw=new MyWindowListener();f.addWindowListener(mw);}}// 创建MyWindowListener类实现WindowListener接口class MyWindowListener implements WindowListener {// 监听器监听事件对象作出处理public void windowClosing(WindowEvent e) {Window window = e.getWindow();window.setVisible(false);// 释放窗口window.dispose();}public void windowActivated(WindowEvent e) {}public void windowClosed(WindowEvent e) {}public void windowDeactivated(WindowEvent e) {}public void windowDeiconified(WindowEvent e) {}public void windowIconified(WindowEvent e) {}public void windowOpened(WindowEvent e) {}}运行结果如图9-1所示。
第9章:输入和输出流
9.1.2 流对象
1. 建立流对象
创建输入输出流对象的常用构造方法用2种,如:
FileInputStream (String name), 直接指定的文件名创建输入流 FileInputStream (File filename), 用文件对象创建输入流。
创建FileOutputStream类、FileReader类和FileWriter类的 流对象与FileInputStream完全类似。
(1) File (String s),由 s 确定 File 对象的文件名。
(2) File (String directory , String s) s确定文件名。
9.1.2 流对象
Java 程序的输入和输出流称为流对象, 输入输出流由文件名 或 File 对象创建。
使用以上三个方法时,如果在读数据之前,已到达输入的末端位置,没有 读入一个字节数据,用返回-1 表示流在读之前已结束。
9.1.2 流对象
2. 输入流的常用方法
FileReader类包含下面用于读字符和字符数组的方法:
(1)int read(), 从输入流读取下一个字符。 返回的整数即该字符的 Unicode值。如果读前已到流的末尾,则返回-1。 (2)int read (char b[]), 从输入流读取长度为 b.length 的字符数据,写入 到字符数组 b,并返回实际所读取的字符数。 (3)int read (char b[], int off, int len),从数据流中读取长度为 len 的字 符数据,写入到字符数组 b 中从下标 off 开始的数组元素中,并返回实际读 取的字符数。
BufferedWriter 类是提供缓冲式输出的类。
JAVA各章习题及答案-全解
JAVA各章习题及答案-全解第1章Java入门一、选择题1.下列选项中,不属于Java 语言特点的一项是( C )。
(A)分布式(B)安全性(C)编译执行(D)面向对象【解析】Java程序采用解释执行的方法。
在系统编译运行Java程序时,Java编译器将Java程序转化为字节码,在运行时,解释器将编译得到的字节码进行解释执行。
2.在Java语言中,( C )是最基本的元素?(A)方法(B)包(C)对象(D)接口【解析】构成Java程序的基本元素类(抽象的对象)。
3.编译一个定义了3个类和10个方法的Java源文件后,会产生( D )个字节码文件?扩展名是( D )?(A)13个字节码文件,扩展名为.class(B)1个字节码文件,扩展名为.class(C)3个字节码文件,扩展名为.java(D)3个字节码文件,扩展名为.class【解析】源文件中的每一个类编译后都会生成一个字节码文件,字节码文件的扩展名是.class。
4.在创建Applet应用程序时,需要用户考虑问题是(B )。
(A)窗口如何创建(B)绘制的图形在窗口中的位置(C)程序的框架(D)事件处理【解析】创建Applet程序时必须继承系统类Applet,而Applet类中已经包含了如何创建窗口以及事件处理等内容,这类程序的框架也都是固定的,而绘制图形在窗口中的位置则需要由用户确定。
5.Java语言属于( B )种语言?(A)面向机器的语言(B)面向对象的语言(C)面向过程的语言(D)面向操作系统的语言【解析】Java语言是一种纯面向对象的语言。
6.下列关于Application和Applet程序的说法中不正确的一项是(B )。
(A)Application使用解释器java.exe(B)Application不使用独立的解释器(C)Applet在浏览器中运行(D)Applet必须继承Java 的Applet类【解析】Application程序包含main()方法,它是一种独立执行的程序,因此必须使用独立的解释器解释执行。
第九章按钮
(注:滚动条出现在画面上) ScrollPane.SCROLLBARS_AS_NEEDED
(注:滚动条需要时才出现在画面上) ScrollPane.SCROLLBARS_NEVER
(注:滚动条永远不会出现在画面上)
这里有一个例子让我们了解该类的使用效果。
11.2 画 布
▪ 什么是画布? ▪ 画布(canvas)是一个可以画图和接受鼠标事件的
2. import java.awt.*;
3. public class Example10_2 extends Applet
4. { 5. Label label1,label2; 6. TextField text1,text2;
//定义两标签类对象 //定义两文本框类对象
7. public void init() 8. {label1=new Label("输入姓名"); 9. label2=new Label("输入性别"); 10. label1.setBackground(Color.red); // 设置标签的背景色 11. label2.setBackground(Color.blue); //设置标签的背景色
第十二章 布局设计
复杂的GUI要求在窗口中的每一个组件都放置到精确的位置上。java 提供了几个布局管理器用于安排容器上的组件。本章主要介绍如下的 各个布局管理器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
获取鼠标的X位置
获取鼠标的Y位置 获取控制键与鼠标的组合键的字符 串
表9-4 MouseListener的方法 方 法 void mousePressed(MouseEvent) void mouseReleased(MouseEvent) 鼠标按下调用 鼠标释放调用 功 能
void mouseEntered(MouseEvent)
9.1 事件处理概述
例9.1利用Swing包的类JColorChooser,设计一个 文字框的文字颜色设臵的程序。事件处理请分别用 四种事件处理方式来实现.运行结果见图9-1 • (1)利用监听器接口实现事件处理 • (2)利用监听器类实现事件处理 ,监听器类缘程 序. • (3)利用内部类实现事件处理 • (4)利用匿名内部类实现事件处理
9.1 事件处理概述
(4)利用匿名内部类实现事件处理
格式: 组件对象.addXXXListener(new 事件监听器(){ //定义匿名内部类 public void 监听器接口说明的方法1(){ ……
}
…… public void 监听器接口说明的方法n(){ …… } } ); //结束匿名类定义
9.1 事件处理概述
3. 事件处理方式 (1)利用监听器接口实现事件处理 (2)利用监听器类实现事件处理 (3)利用内部类实现事件处理 (4)利用匿名内部类实现事件处理
9.1 事件处理概述
(1)利用监听器接口实现事件处理
同一个类中实现一个事件的接口。对该接口的方法进行定义,实现特 定的功能。一般形式如下: public class 事件发生类名 implements 事件监听器接口{ …… public事件发生类名(){ … 组件.addXXXListener(this); //注册到监听器对象,this表示当前 对象。 … } public void 监听器接口说明的方法1(){ …… } …… public void 监听器接口说明的方法n(){ …… } }
9.2 常用的事件处理
表9-3 MouseEvent的主要方法
方 法
int getButton() int getClickCount() Point getPoint()
功 能
获取鼠标按键变更的状态 获取鼠标点击的次数 获取鼠标点击的位置
int getX()
int getY() String getMouseModifiersText(int)
KeyEvent
FocusEvent AdjustmentEvent WindowEvent
KeyListener
FocusListener AdjustmentLlistener WindowListener WindowStateListener WindowFocusListener
9.2 常用的事件处理
图9-4移动的效果图
图9-3.鼠标轮滚动事件 • 鼠标轮滚动事件可以处理鼠标中间的鼠标轮的动 作。这种事件的实现依赖于事件类 MouseWheelEvent和接口MouseWheelListener。 实现鼠标轮滚动事件的具体步骤如下:
图9-2
9.2 常用的事件处理
2.鼠标事件处理
• 鼠标是一种最常见的输入方式。用户可以用鼠 标绘制图形,利用鼠标实现特殊的控制,例如 游戏操作的控制等功能。Java语言中主要提供 了三种不同类型的鼠标事件:
– 鼠标键事件; – 鼠标移动事件; – 鼠标轮滚动事件
•
鼠标键事件多用于鼠标的单击处理,鼠标移动 事件是用于鼠标移动的处理,至于鼠标轮滚动 事件是从JDK1.4后引入的鼠标事件,用于鼠标 轮的动作处理。这三种类型的鼠标事件一般是 以容器组件作为事件源,它们各有自己的监听 器。
9.2 常用的事件处理
1.鼠标键事件. • 鼠标键事件处理是一种最常见的鼠标事件处理方 式。鼠标键事件处理涉及到监听器接口 MouseListener和鼠标事件MouseEvent。对于这种 事件处理的具体步骤是: – 组件通过方法addMouseListener()到注册 MouseListener中。允许监听器对象在程序运 行过程中监听组件是否有鼠标键事件 MouseEvent对象发生。 – 实现MouseListener接口的所有方法,提供事 件发生的具体处理办法。
9.1 事件处理概述
(2)利用监听器类实现事件处理 就是通过扩展一个监听器接口,定义监听器类,然后对要求发生动作的组件再 注册到这个监听器类的对象中。这种方法的一般形式如下: public class 自定义监听类名extends 事件适配器(或 implements事件监听器){//定 义监听器类 …… public void 监听器接口说明的方法1(){ …… } …… public void 监听器接口说明的方法n(){ …… } } public class 事件发生类名{ //定义事件发生的类 …… public自定义监听类名(){ … 组件.addXXXListener(new自定义监听类名()); /注册组件到监听 器对象 … }…. }
图9-1
9.1 事件处理概述
4.常见的事件处理类型
Java语言中提供事件处理的包主要有java.awt.event 和javax.swing.event包。
其中,java.awt.event包提供了对awt包和swing包常 见组件的支持,与事件处理相关常见的的事件类和 事件监听器接口见表9-1。至于swing包提供了对高 级事件处理。
9.2 常用的事件处理
表9-5 MouseMotionListener的方法 方 法 void mouseDragged(MouseEvent) void mouseMoved(MouseEvent) 功 能 鼠标拖动调用 鼠标移动调用
例9.4 设计一个程序,可以实现文字“Hello, Java世 界”随着鼠标移动而移动,如果鼠标拖动的时候, 会将文字放大显示。程序清单见 MouseMotionText.java,运行结果见下图.
2.事件
事件处理的三要素。 • (1)事件源 事件源是一个事件的产生者,如按钮、窗口 及文本域等。 • (2)事件类型 Java中所有的事件都封装成一个类,这些 事件类被集中在java.awt.event包,所有的事件类均继承了 AWTEvent 类和一个方法 ——getSouce ()方法,该方法 返回发生事件的对象。 • (3)事件监听器 不同的类型事件发生后,由事件监听器 接收事件并调用相应的事件处理方法。所有的事件监听器 实 际 上 都 是 一 个 java.awt.event 包 中 的 接 口 , 引 入 了 java.util.EventListener接口。不同事件类型的监听器具有 不同的方法。
9.1 事件处理概述
基于代理的事件处理模型的特点 • ①事件不会被意外地处理。在层次模型中,一个 事件可能传播到容器,并在非预期的层次被处理。 • ②有可能创建并使用适配器(adapter)类对事件动 作进行分类。 • ③有利于把工作分布到各个类中。 • 重点学习这种事件处理模型
9.1 事件处理概述
9.1 事件处理概述
表9-1 常见的事件类和事件监听接口
事件类 ActionEvent 事件监听器接口 ActionListener
ItemEvent
MouseEvent MouseWheelEvent
ItemListener
MouseMotionListener MouseListener MouseWheelListener
void mouseExited(MouseEvent) void mouseClicked(MouseEvent)
鼠标进入调用
鼠标离开调用 鼠标点击调用
9.2 常用的事件处理
例9.3 设计一个程序,可以获取并显示鼠标位臵和 鼠标状态。当鼠标按下时,能在当前位臵绘制一个 正方形。程序清单见MouseStatus.java,运行结果 见下图.
9.1 事件处理概述
2.事件处理步骤
① 程序加入java.awt.event包: import java.awt.event; ② 给所需的事件源对象注册事件监听器: 事件源对象.addXXXListener(XXXListener); ③ 实现相应的方法。如果某个监听器接口包含多 个方法,则需要实现所有的方法
表9-2 ActionListener的主要方法
方 法
public void actionPerformed(ActionEvent)
功 能
动作发生时被调用
9.2 常用的事件处理
例9.2 设计一个程序,可以实现一个由文本框和文 本区组成的简易聊天室界面,该程序允许用户启动 聊天也可以禁止聊天。程序清单见 SimpleChatRoom .java,运行结果见图9-2
图9-3
9.2 常用的事件处理
2.鼠标移动事件; • 事件类MouseEvent还对应另一个监听器接口 MouseMotionListener。该接口可以实现鼠标的 两种运动的处理:鼠标移动处理和鼠标拖动的处 理。实现鼠标移动事件处理的一般步骤如下:
– 组件通过方法addMouseMotionListener()到注册 MouseMotionListener中。允许MousMotionListener监 听器对象在程序运行过程中监听组件是否有鼠标键事 件MouseEvent对象发生。 – 实现MouseMotionListener接口的所有方法,提供事件 发生的具体处理办法。
9.1 事件处理概述
(3)利用内部类实现事件处理
这种方法就是将独立的监听器类定义成事件发生类的内部类。形式如下: public class 自定义监听类名{ //定义事件发生的类 …… public自定义监听类名(){ … 组件.addXXXListener(new自定义监听类名()); //注册组件到 监听器对象 … } …. class 自定义监听类名extends 事件适配器 (或 implements事件监听器){//定 义内部监听器类 …… public void 监听器接口说明的方法1(){ …… } …… public void 监听器接口说明的方法n(){ …… } }//结束内部类 }