第一篇:java程序设计简明教程--上机练习题参考答案
《java程序设计简明教程》上机练习题参考答案
目 录
上机练习题1..................................................3 1.用循环语句分别打印九九乘法表......................................................................................................................3 2.定义两个数组......................................................................................................................................................4 3.编写一个简单的考试程序..................................................................................................................................4 上机练习题2..................................................6 1.编写程序,包括一个文本域和三个命令按钮...................................................................................................6 2.编写程序,包括一个文本框、一个密码框和两个按钮...................................................................................7 3.编写程序,建立一个带有菜单的窗体..............................................................................................................8 4.编写程序,将窗口尺寸设置为不可更改,并处理窗口事件...........................................................................9 5.编写程序,用列表框列出一些选项,设置一个按钮.....................................................................................10 6.编写程序,用标签显示一道简单测试题,答案使用单选按钮列出.............................................................11 上机练习题3.................................................13 1.编写Application在窗口内画54个不同颜色的小圆......................................................................................13 2.编制Applet程序,使用Graphics类中的各种图形绘制方法........................................................................14 3.编制Applet程序,以百叶窗效果显示图像....................................................................................................14 4.编制Applet程序,实现12个钢琴键及其声音的模拟..................................................................................17 上机练习题4.................................................18 1.假设在addressbook数据库表中,存在多个姓氏相同的人,根据这一情况,建立相应的查询功能.......18 2.编写一个应用程序,使其可以从一个数据库的某个表中查询一个列的所有信息.....................................20 3.设计一个数据库应用程序,功能是在学生数据库的成绩表中加入某门课程的所有学生的成绩.............23 上机练习题5.................................................26 1.编写GUI程序,制作一个文本文件阅读器....................................................................................................26
Java程序设计简明教程
2.编制程序,计算表达式“2*4*6+8*10*12+……+26*28*30”的值,并把结果输出到文件中....................27 3.编制程序............................................................................................................................................................28 4.编写程序,实现压缩、解压缩Zip文件.........................................................................................................29 5.编写程序,从试题文件中抽取Java单选题进行测试练习............................................................................32 上机练习题6.................................................34 1.编制程序,求如下表达式的值........................................................................................................................34 2.用继承Thread类的方法实现一个多线程程序...............................................................................................35 3.编制程序,同时显示两个时区的时钟,并将时钟的结果显示在Fram窗体中...........................................37 4.使用异常处理机制和输入/输出处理机制编写一个程序................................................................................41 上机练习题7.................................................42 1.编制Applet程序,使用Graphics类的常用方法,绘制一面五星红旗........................................................42 2.编制Applet程序,实现一行文字的动画显示,即文字跑马灯....................................................................42 3.编制Applet程序,实现图片的水中倒影........................................................................................................44 4.结合图形用户界面与事件处理,创建一个日历GUI程序............................................................................46 上机练习题8.................................................48 1.设计Java Applet程序,实现在图片上飘雪花的特效....................................................................................48 2.设计一个通讯录,保存读者信息....................................................................................................................50 3.构造一个程序,它在一个窗口描绘出一个小鸟的图标.................................................................................54
上机练习题参考答案
上机练习题1 1.用循环语句分别打印如图1-24所示的九九乘法表。【参考程序】
//文件XiTi1_1_1_1.java package XiTi;import java.io.*;import java.lang.*;public class XiTi1_1_1{ public static void main(String args[]){ String str=“ ”;int i,j;for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ str=i+“*”+j+“=”+i*j;if(i
//文件XiTi1_1_3.java package XiTi;import java.io.*;import java.lang.*;public class XiTi1_1_3{ public static void main(String args[]){ String str=” “;3
Java程序设计简明教程
int i,j;for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ str=i+”*“+j+”=“+i*j;System.out.print(str.length()==5?str+” “:str+” “);} System.out.println(”“);} } } 2.定义两个数组,首先将第一个数组中的元素复制到第二个数组中,然后将第二个数数组进行从大到小的排序,最后将两个数组中的对应元素进行比较,试统计两个数组中对应位置上相同元素的个数。
【参考程序】
//文件XiTi1_2.java package XiTi;import java.io.*;import java.lang.*;public class XiTi1_2{ public static void main(String[] args){ int a[]={278,109,063,930,589,184,505,269,8,83};int b[]=new int[10];int t,cnt=0;for(int i=0;i<10;i++)b[i]=a[i];for(int i=1;i<10;i++)for(int j=0;j<10-i;j++)if(b[j]
System.out.println(”“);System.out.println(”********************* b **********************“);System.out.println(”“);for(int i=0;i<10;i++)System.out.print(b[i]+” “);System.out.println(”“);System.out.println(”“);System.out.println(”对应元素相同的个数为:“+cnt);System.out.println(”“);} } 3.编写一个简单的考试程序。【参考程序】
上机练习题参考答案
//文件XiTi1_3.java package XiTi;import java.io.*;import java.util.Date;public class XiTi1_3{ public static void main(String[] args){ String yes=”Y“,ok=”“;int x,x1,y,opr=2,s,h,m,t1,t2;String op,str=”“,re=”“,a=”A“;do{ x=new Long(Math.round(Math.random()*99+1)).intValue();y=new Long(Math.round(Math.random()*99+1)).intValue();opr=new Long(Math.round(Math.random()*3+1)).intValue();s=new Date().getSeconds();h=new Date().getHours();m=new Date().getMinutes();t1=h*3600+m*60+s;switch(opr){ case 1: str=x+”+“+y+”=?“;re=Integer.toString(x+y);break;case 2: str=x+”-“+y+”=?“;re=Integer.toString(x-y);break;case 3: str=x+”*“+y+”=?“;re=Integer.toString(x*y);break;case 4: x1=Math.max(x,y);y=Math.min(x,y);x=x1;x=x-x%y;str=x+”/“+y+”=?“;re=Integer.toString(x/y);break;} System.out.print(str);try{ BufferedReader in =new BufferedReader(new InputStreamReader(System.in));ok=in.readLine();
}catch(IOException e){};s=new Date().getSeconds();h=new Date().getHours();m=new Date().getMinutes();t2=h*3600+m*60+s;if(ok.equals(re.trim()))System.out.println(”正确!用时:“+(t2-t1)+”秒“);else if(a.equals(ok.toUpperCase()))5
Java程序设计简明教程
System.out.println(”答案:“+re+”,请多努力!“);else System.out.println(”错误!答案:“+re);System.out.print(”继续吗(Y/N)?“);try{ BufferedReader in =new BufferedReader(new InputStreamReader(System.in));ok=in.readLine();
}catch(IOException e){};}while(yes.equals(ok.toUpperCase()));System.out.println(”“);} }
上机练习题2 1.编写程序,包括一个文本域和三个命令按钮,按钮标题分别为红色、黄色和蓝色,单击相应的按钮,将文本域的前景色设置为红色、黄色和蓝色。
【参考程序】
import javax.swing.*;import javax.swing.event.*;import java.awt.event.*;import java.awt.*;public class xiti2_1 extends JFrame implements ActionListener{ JButton red,yellow,blue;JTextArea ta=new JTextArea(5,20);xiti2_1(){ red=new JButton(”红色“);yellow=new JButton(”黄色“);blue=new JButton(”蓝色“);red.addActionListener(this);yellow.addActionListener(this);blue.addActionListener(this);JPanel jp=new JPanel();jp.setLayout(new FlowLayout(FlowLayout.CENTER));jp.add(red);jp.add(yellow);jp.add(blue);Container con=getContentPane();con.add(ta,BorderLayout.CENTER);con.add(jp,BorderLayout.SOUTH);setSize(300,200);setTitle(”上机练习题2_1“);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);validate();} public void actionPerformed(ActionEvent e){ JButton btn=(JButton)e.getSource();if(btn==red){ ta.setForeground(Color.red);
上机练习题参考答案
} if(btn==yellow){ ta.setForeground(Color.yellow);} if(btn==blue){ ta.setForeground(Color.blue);} } public static void main(String args[]){ new xiti2_1();} } 2.编写程序,包括一个文本框、一个密码框和两个按钮。按钮标题分别为确定和取消,用户在密码框中输入密码,单击确定按钮,将在密码框中输入的字符显示在文本框中。
【参考程序】
import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;public class xiti2_2 extends JFrame implements ActionListener{ JPanel p1=new JPanel();JPanel p2=new JPanel();JPanel p3=new JPanel();JPanel p4=new JPanel();JPanel p5=new JPanel();JTextField text=new JTextField(15);JPasswordField password=new JPasswordField(15);JButton ok=new JButton(”确定“);JButton cancel=new JButton(”取消“);xiti2_2(){ Container con=getContentPane();con.setLayout(new GridLayout(5,1));p2.add(new JLabel(”密码:“));p2.add(password);p3.add(new JLabel(”文本:“));p3.add(text);p4.add(ok);p4.add(cancel);ok.addActionListener(this);cancel.addActionListener(this);con.add(p1);con.add(p2);con.add(p3);con.add(p4);con.add(p5);setSize(300,200);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setTitle(”上机练习题2_2“);validate();} public void actionPerformed(ActionEvent e){ if(e.getSource()==ok){ text.setText(password.getText());7
Java程序设计简明教程
} if(e.getSource()==cancel){ dispose();System.exit(0);} } public static void main(String args[]){ new xiti2_2();} } 3.编写程序,建立一个带有菜单的窗体。当用户选择“Color”或“Style”菜单的相关选项时,标签中文字的字体和颜色会发生相应的变化。
【参考程序】
import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;class xiti2_3 extends JFrame implements ActionListener{ JMenuBar menubar=new JMenuBar();JTextArea ta=new JTextArea(”Hello Java!“);xiti2_3(){ setJMenuBar(menubar);JMenu menu,submenu;JMenuItem menuItem;menu=new JMenu(”Color“);menu.setMnemonic(KeyEvent.VK_C);menubar.add(menu);menuItem=new JMenuItem(”Yellow“);menuItem.setMnemonic(KeyEvent.VK_Y);menuItem.addActionListener(this);menu.add(menuItem);menuItem=new JMenuItem(”Orange“);menuItem.setMnemonic(KeyEvent.VK_O);menuItem.addActionListener(this);menu.add(menuItem);menuItem=new JMenuItem(”Pink“,KeyEvent.VK_P);menuItem.addActionListener(this);menu.add(menuItem);menuItem=new JMenuItem(”Blue“);menuItem.setMnemonic(KeyEvent.VK_B);menuItem.addActionListener(this);menu.add(menuItem);menu=new JMenu(”Style“);menu.setMnemonic(KeyEvent.VK_S);menubar.add(menu);menuItem=new JMenuItem(”Plain“);menuItem.setMnemonic(KeyEvent.VK_P);menuItem.addActionListener(this);menu.add(menuItem);menuItem=new JMenuItem(”Bold“);menuItem.setMnemonic(KeyEvent.VK_B);menuItem.addActionListener(this);8
上机练习题参考答案
menu.add(menuItem);menuItem=new JMenuItem(”Italic“);menuItem.setMnemonic(KeyEvent.VK_I);menuItem.addActionListener(this);menu.add(menuItem);menu=new JMenu(”Exit“);menu.setMnemonic(KeyEvent.VK_E);menubar.add(menu);menuItem=new JMenuItem(”Close Window“);menuItem.setMnemonic(KeyEvent.VK_W);menuItem.addActionListener(this);menu.add(menuItem);Container cp=getContentPane();cp.add(ta,BorderLayout.SOUTH);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setTitle(”菜单演示“);setSize(300,200);setVisible(true);} public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”Yellow“)ta.setForeground(Color.yellow);if(e.getActionCommand()==”Orange“)ta.setForeground(Color.orange);if(e.getActionCommand()==”Pink“)ta.setForeground(Color.pink);if(e.getActionCommand()==”Blue“)ta.setForeground(Color.blue);if(e.getActionCommand()==”Plain“)ta.setFont(new Font(”Dialog“,Font.PLAIN,24));if(e.getActionCommand()==”Bold“)ta.setFont(new Font(”Dialog“,Font.BOLD,24));if(e.getActionCommand()==”Italic“)ta.setFont(new Font(”Dialog“,Font.ITALIC,24));if(e.getActionCommand()==”Close Window“)System.exit(0);} public static void main(String args[]){ xiti2_3 menuexmple=new xiti2_3();} } 4.编写程序,将窗口尺寸设置为不可更改,并处理窗口事件,使得点击窗口关闭按钮时,会弹出对话框,提示用户是否确定要关闭窗口。
【参考程序】
import java.awt.event.*;import javax.swing.*;class MyFrame extends JFrame{ private JLabel label;public MyFrame(){ setTitle(”我的窗口“);label=new JLabel(”请点击关闭按钮!“,JLabel.CENTER);getContentPane().add(label);9
Java程序设计简明教程
//为窗口添加关闭事件
addWindowListener(new WindowCloseListener(this));//将点击窗口关闭按钮默认的关闭窗口功能去掉
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//设置窗口大小不可更改 setResizable(false);setSize(300,200);setVisible(true);} class WindowCloseListener extends WindowAdapter{ JFrame f;public WindowCloseListener(JFrame frame){ f=frame;//f是对话框的父窗口 } public void windowClosing(WindowEvent e){ int i=JOptionPane.showConfirmDialog(f,”确定要关“,”“,JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);if(i==JOptionPane.OK_OPTION){ System.exit(0);//点击确定退出程序 } } } public static void main(String[] args){ JFrame frame=new MyFrame();} }
闭窗口吗?5.编写程序,用列表框列出一些选项,设置一个按钮,点击按钮就会将所选的选项添加到另一个列表框中,其中第二个列表框中显示的已选项目可以删除。程序运行界面如图2-16所示。
【参考程序】
import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;class MyList extends JFrame { JPanel panel;JButton add,remove;DefaultListModel listModel1,listModel2;JList list1,list2;String[] s={”计算机科学与技术“,”计算机通信“,”应用电子“,”电子商务“,”会计电算化“,”法律“,”工商管理“,”生物技术“,”建筑工程技术“,”工业设计“,”商务英语“,”统计“};ArrayList array1,array2;public MyList(){ setTitle(”列表框“);add=new JButton(”>>“);add.addActionListener(new AddActionListener());//为按钮注册监听器 remove=new JButton(”<<“);remove.addActionListener(new RemoveActionListener());//为按钮注册监听器
listModel1=new DefaultListModel();//为列表1创建一个列表框模型 listModel2=new DefaultListModel();//为列表2创建一个列表框模型 for(int i=0;i 上机练习题参考答案 list1=new JList(listModel1);//通过列表框模型1创建列表框1 list2=new JList(listModel2);//通过列表框模型2创建列表框2 panel=new JPanel();panel.setLayout(new GridLayout(2,1));//面板用来放置按钮 panel.add(add);panel.add(remove);Container c=getContentPane();c.setLayout(new FlowLayout(FlowLayout.LEFT));c.add(list1);c.add(panel);c.add(list2);setSize(280,280);setVisible(true);} class AddActionListener implements ActionListener{ public void actionPerformed(ActionEvent e){ int id=-1;id=list1.getSelectedIndex();//得到列表框1中被选中的项 if(id>=0){ listModel2.addElement(listModel1.get(id));//向列表框2中添加所选项 listModel1.remove(id);//将列表框1中所选项删除 } } } class RemoveActionListener implements ActionListener{ public void actionPerformed(ActionEvent e){ int id=-1;id=list2.getSelectedIndex();//得到列表框2中被选中的项 if(id>=0){ listModel1.addElement(listModel2.get(id));//向列表框1中添加所选项 listModel2.remove(id);//将列表框2中所选项删除 } } } public static void main(String args[]){ new MyList();} } 6.编写程序,用标签显示一道简单测试题,答案使用单选按钮列出,用户选择答案后,会弹出对话框显示结果或说明。 【参考程序】 import javax.swing.*;import java.awt.*;import java.awt.event.*;class Question{ public JFrame frame;public JPanel panel;static JLabel label;public JRadioButton b1,b2,b3;static String question=”如果你意外地拿到一千元奖金,想去买一件很需要的大衣,但是钱不够;如果去买一双不急需要的运动鞋,则又多了数百元,你会怎么做?“;static String xx1=”自已添些钱把大衣买回来。“;11 Java程序设计简明教程 static String xx2=”买运动鞋再去买些其它的小东西。“;static String xx3=”什么都不买先存起来。“;static String dd1=”你的决断力不错,虽然有时也会三心二意、犹豫徘徊,可总是在重要关头作出决定,你最大的特色是作了决定不再反悔。“;static String dd2=”你是拿不定主意的人,做事没主见,处处要求别人给你意见,很少自已做判断,因为个性上你有些自卑,不肯定自己。“;static String dd3=”你是判断力超级强的人,不客气地说,你甚至有点莽撞,就是因为你冲动率直的个性,反而考虑不够周详,你常常后悔自己匆匆作决定,忽略了其它事情。“;public JOptionPane optionPane;public Question(){ //构造方法,完成布局 frame=new JFrame(”心理测试“);panel=new JPanel();panel.setLayout(new GridLayout(3,1));label=new JLabel(question,JLabel.CENTER);b1=new JRadioButton(xx1);b2=new JRadioButton(xx2);b3=new JRadioButton(xx3);ButtonGroup group=new ButtonGroup();group.add(b1);group.add(b2);group.add(b3);RadioListener myListener=new RadioListener();b1.addActionListener(myListener);b2.addActionListener(myListener);b3.addActionListener(myListener);Container c=frame.getContentPane();c.add(label,BorderLayout.NORTH);c.add(panel,BorderLayout.CENTER);panel.add(b1);panel.add(b2);panel.add(b3);frame.pack();frame.setVisible(true);} class RadioListener implements ActionListener{ public void actionPerformed(ActionEvent e){ //事件处理,点击选项弹出相应的对话框 JRadioButton rb=(JRadioButton)e.getSource();if(rb==b1){ JOptionPane.showMessageDialog(frame,dd1,”“,JOptionPane.DEFAULT_OPTION);} if(rb==b2){ JOptionPane.showMessageDialog(frame,dd2,”“,JOptionPane.DEFAULT_OPTION);} if(rb==b3){ JOptionPane.showMessageDialog(frame,dd3,”“,JOptionPane.DEFAULT_OPTION);} } } public static void main(String[] args){ new Question();} } 12 上机练习题参考答案 上机练习题3 1.编写Application在窗口内画54个不同颜色的小圆,每当窗口显示在显示器上、从隐藏变成显示、从缩小图标还原、改变窗口的大小时,小圆所呈现的颜色也可以发生变化。(提示:使用随机数产生随机颜色)。程序以不同颜色的小圆铺满窗口。如果在窗口内只显示某个特定的部分,其他部分则不显示时。 【参考程序】 //文件RandomColorDemo.java import java.awt.*;import javax.swing.*;class RandomColorDemo extends JFrame{ static RandomColorDemo frm=new RandomColorDemo();public static void main(String args[]){ frm.setTitle(”Random Color“);frm.setSize(200,150);frm.setVisible(true);} public void paint(Graphics g){ for(int x=10;x<=180;x=x+20)for(int y=30;y<=140;y=y+20){ int red=(int)(Math.random()*255);// 红色的随机数 int green=(int)(Math.random()*255);// 绿色的随机数 int blue=(int)(Math.random()*255);// 蓝色的随机数 g.setColor(new Color(red,green,blue));// 设置颜色 g.fillOval(x,y,15,15);// 用指定的颜色填满小圆 } } } //文件RandomColor.java import java.awt.*;import javax.swing.*;class RandomColor extends JFrame{ static RandomColor frm=new RandomColor();public static void main(String args[]){ frm.setTitle(”Random Color“);frm.setSize(200,150);frm.setVisible(true);} public void paint(Graphics g){ g.setClip(35,37,125,100);//g.clipRect(35,37,125,100);for(int x=10;x<=180;x=x+20)for(int y=30;y<=140;y=y+20){ int red=(int)(Math.random()*255);// 红色的随机数 int green=(int)(Math.random()*255);// 绿色的随机数 int blue=(int)(Math.random()*255);// 蓝色的随机数 g.setColor(new Color(red,green,blue));// 设置颜色 g.fillOval(x,y,15,15);// 用指定的颜色填满小圆 } //g.clearRect(35,37,125,100); Java程序设计简明教程 } } 2.编制Applet程序,使用Graphics类中的各种图形绘制方法,绘制一个可爱的熊宝宝(或其他自己爱好的小动物,例如,小猪,小兔等)。在小应用程序浏览器中查看程序的执行结果。 【参考程序】 import java.applet.*;import java.awt.*;import java.awt.Graphics;public class Bear extends Applet{ public void paint(Graphics g){ g.drawOval(100,40,180,180);//face g.fillOval(120,90,40,35);//left eye g.fillOval(220,90,40,35);//right eye g.fillOval(180,140,25,25);//nose g.setColor(Color.red);g.fillArc(166,170,50,30,180,180);//mouse g.fillArc(85,25,80,80,25,223);//left ear g.fillArc(215,25,80,80,-57,213);//right ear g.drawLine(156,210,96,320);//body g.drawLine(96,320,126,410);g.drawLine(236,210,296,320);g.drawLine(296,320,256,410);g.drawLine(126,410,256,410);g.fillOval(80,240,50,50);//arm g.fillOval(260,240,50,50);g.fillOval(100,390,50,50);//leg g.fillOval(230,390,50,50);} } 3.编制Applet程序,以百叶窗效果显示图像。【参考程序】 //文件Efficient.java import java.awt.*;import java.applet.*;import java.io.*;import java.awt.image.*;public class Efficient extends Applet implements Runnable{ private Image img[],showImage;private MediaTracker imageTracker;private int ImageW,ImageH,totalImage=5,currentImage,nextImage;private Thread thread;private int delay;private int totalPix,pix1[],pix2[],pix3[],pix4[],pix5[],pixA[],pixB[];public void init(){ this.setBackground(Color.black);img=new Image[totalImage];imageTracker=new MediaTracker(this);String s=new String(”“);for(int i=0;i 上机练习题参考答案 imageTracker.addImage(img[i],0);} try{ imageTracker.waitForID(0);}catch(InterruptedException e){} if(getParameter(”delay“)==null){ delay=3000;} else{ delay=Integer.parseInt(getParameter(”delay“));} ImageW=img[0].getWidth(this);ImageH=img[0].getHeight(this);totalPix=ImageW*ImageH;pix1=new int[totalPix];PixelGrabber PG1=new PixelGrabber(img[0],0,0,ImageW,ImageH,pix1,0,ImageW);try{ PG1.grabPixels();}catch(InterruptedException ex){} pix2=new int[totalPix];PixelGrabber PG2=new PixelGrabber(img[1],0,0,ImageW,ImageH,pix2,0,ImageW);try{ PG2.grabPixels();}catch(InterruptedException ex){} pix3=new int[totalPix];PixelGrabber PG3=new PixelGrabber(img[2],0,0,ImageW,ImageH,pix3,0,ImageW);try{ PG3.grabPixels();}catch(InterruptedException ex){} pix4=new int[totalPix];PixelGrabber PG4=new PixelGrabber(img[3],0,0,ImageW,ImageH,pix4,0,ImageW);try{ PG4.grabPixels();}catch(InterruptedException ex){} pix5=new int[totalPix];PixelGrabber PG5=new PixelGrabber(img[4],0,0,ImageW,ImageH,pix5,0,ImageW);try{ PG5.grabPixels();}catch(InterruptedException ex){} currentImage=0;pixA=new int[totalPix];pixB=new int[totalPix];showImage=img[0];thread=new Thread(this);thread.start();} public void paint(Graphics g){ g.drawImage(showImage,0,0,this);} public void update(Graphics g){ paint(g);} public void run(){ 15 Java程序设计简明教程 if(thread==null){ thread=new Thread(this);thread.start();} while(true){ try{ thread.sleep(delay);nextImage=((currentImage+1)%totalImage);if(currentImage==0){ System.arraycopy(pix1,0,pixA,0,totalPix);System.arraycopy(pix2,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} if(currentImage==1){ System.arraycopy(pix2,0,pixA,0,totalPix);System.arraycopy(pix3,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} if(currentImage==2){ System.arraycopy(pix3,0,pixA,0,totalPix);System.arraycopy(pix4,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} if(currentImage==3){ System.arraycopy(pix4,0,pixA,0,totalPix);System.arraycopy(pix5,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} if(currentImage==4){ System.arraycopy(pix5,0,pixA,0,totalPix);System.arraycopy(pix1,0,pixB,0,totalPix);showImage=createImage(new MemoryImageSource(ImageW,ImageH,pixA,0,ImageW));repaint();} while(true){ for(int i=0;i<(int)(ImageH/10);i++){ try{ thread.sleep(100);for(int j=0;j 上机练习题参考答案 currentImage=nextImage;repaint();}catch(InterruptedException e){} } } } 4.编制Applet程序,实现12个钢琴键及其声音的模拟。【参考程序】 //文件Piano.java import java.awt.*;import java.applet.*;class Keyboard extends Canvas {//钢琴键类 Color keyColor=Color.white;AudioClip key;int width,height;Keyboard(Color c, AudioClip k){//初始化钢琴键的颜色及声音 keyColor=c;setBackground(keyColor);key=k;width=this.getSize().width;height=this.getSize().height;} public boolean mouseDown(Event event, int x, int y){//鼠标按下事件 key.play();return true;} public void paint(Graphics g){//画钢琴键 width=this.getSize().width;height=this.getSize().height;g.setColor(Color.black);g.drawRect(0,0,width-1,height-1);} } public class Piano extends Applet{ private int height,width;private Keyboard key[];private AudioClip sound[];public void init(){ this.setLayout(null);width=this.size().width;height=this.size().height;key=new Keyboard[12];sound=new AudioClip[12];String s=new String(”“);for(int i=0;i<12;i++){ s=i + ”.au“;sound[i]=getAudioClip(getCodeBase(),s);} key[0]=new Keyboard(Color.white,sound[0]);key[1]=new Keyboard(Color.black,sound[1]);key[2]=new Keyboard(Color.white,sound[2]);key[3]=new Keyboard(Color.black,sound[3]);17 Java程序设计简明教程 key[4]=new Keyboard(Color.white,sound[4]);key[5]=new Keyboard(Color.white,sound[5]);key[6]=new Keyboard(Color.black,sound[6]);key[7]=new Keyboard(Color.white,sound[7]);key[8]=new Keyboard(Color.black,sound[8]);key[9]=new Keyboard(Color.white,sound[9]);key[10]=new Keyboard(Color.black,sound[10]);key[11]=new Keyboard(Color.white,sound[11]);key[1].setBounds(30,0,20,60);add(key[1]);key[3].setBounds(70,0,20,60);add(key[3]);key[6].setBounds(150,0,20,60);add(key[6]);key[8].setBounds(190,0,20,60);add(key[8]);key[10].setBounds(230,0,20,60);add(key[10]);key[0].setBounds(0,0,40,110);key[2].setBounds(40,0,40,110);key[4].setBounds(80,0,40,110);key[5].setBounds(120,0,40,110);key[7].setBounds(160,0,40,110);key[9].setBounds(200,0,40,110);key[11].setBounds(240,0,40,110);add(key[0]);add(key[2]);add(key[4]);add(key[5]);add(key[7]);add(key[9]);add(key[11]);} } 上机练习题4 1.假设在addressbook数据库表中,存在多个姓氏相同的人,根据这一情况,建立相应的查询功能,使用户可以在ResultSet中滚动记录。要求设计一个合适的图形界面。 程序源代码如下: 【参考程序】 //数据库连接使用ConnectServer类 import java.awt.*;import java.sql.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.util.*;import javax.swing.table.*;public class ex4_1 extends JFrame implements ActionListener{ JTable table;TableModel model; 上机练习题参考答案 DefaultTableModel dtm;Vector title=new Vector();JScrollPane p1;JPanel p3=new JPanel();JLabel bq1=new JLabel(”按姓氏或姓名查询“);JTextField combSs=new JTextField(6);JButton btn1=new JButton(”确定“);String strs=null,xxno,xscore;Statement stmt;ResultSet rs;ResultSetMetaData dbmd;public ex4_1(){ String sql=”select * from address “;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title);table=new JTable(dtm);initTable();table.setRowHeight(20);p1=new JScrollPane(table);btn1.addActionListener(this);p3.add(bq1);p3.add(combSs);p3.add(btn1);this.getContentPane().add(p3,”North“);this.getContentPane().add(p1,”Center“);}catch(Exception e){System.out.println(e);dispose();} this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);}});setTitle(”学生信息查询“);setSize(600,400);setVisible(true);} void initTable(){ dtm.setRowCount(0);try{ rs.beforeFirst();while(rs.next()){ Vector v1=new Vector();for(int i=1;i<=dbmd.getColumnCount();i++)v1.addElement(rs.getString(i));dtm.addRow(v1);} }catch(SQLException e){e.printStackTrace();} dtm.fireTableStructureChanged();} public void actionPerformed(ActionEvent e){ Vector title1=new Vector();if(e.getSource()==btn1){ strs=(String)combSs.getText();String sql=”select * from address where 姓名 LIKE '“+strs+”%'“;19 Java程序设计简明教程 try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title1.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title1);table=new JTable(dtm);}catch(Exception ee){System.out.println(ee);dispose();} initTable();p1=new JScrollPane(table);this.getContentPane().add(p1,”Center“);setTitle(”学生信息“);table.setRowHeight(20);setSize(600,400);setVisible(true);} } public static void main(String args[]){ if(!ConnectServer.conn(”jdbc:odbc:xsgl“,”sa“,”“)){ JOptionPane.showMessageDialog(null,”数据库连接不成功“);System.exit(0);} new ex4_1();} } 2.编写一个应用程序,使其可以从一个数据库的某个表中查询一个列的所有信息。【参考程序】 import java.awt.*;import java.sql.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import javax.swing.table.*;public class ex4_2 extends JFrame implements ActionListener{ JTable table;DefaultTableModel dtm;Vector title=new Vector();JScrollPane p1;JPanel p2=new JPanel();JPanel p3=new JPanel();JButton b1=new JButton(”首页“);JButton b2=new JButton(”上页“);JButton b3=new JButton(”下页“);JButton b4=new JButton(”尾页“);JLabel bb=new JLabel(” “);JButton btn1=new JButton(”查询“);JComboBox combSs=new JComboBox();int count=0;int pagesize=6;int pagecount=0;20 上机练习题参考答案 int page=1;Statement stmt;ResultSet rs;ResultSetMetaData dbmd;public ex4_2(){ String sql=”select * from baseinf“;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);count=getcount();pagecount=(int)count/pagesize+(count%pagesize==0?0:1);dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++){ title.addElement(dbmd.getColumnName(i));combSs.addItem(dbmd.getColumnName(i));} dtm=new DefaultTableModel(null,title);table=new JTable(dtm);initTable();table.setRowHeight(20);p1=new JScrollPane(table);if(pagecount!=0)bb.setText(”第“+page+”页“);b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);b4.addActionListener(this);btn1.addActionListener(this);p2.add(b1);p2.add(b2);p2.add(b3);p2.add(b4);p2.add(bb);p3.add(btn1);p3.add(combSs);this.getContentPane().add(p3,”North“);this.getContentPane().add(p1,”Center“);this.getContentPane().add(p2,”South“);}catch(Exception e){System.out.println(e);dispose();} this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ try{ rs.close();stmt.close();ConnectServer.con.close();System.exit(0);}catch(SQLException ee){ee.printStackTrace();} }});setTitle(”书目信息分页浏览“);setSize(500,300);setVisible(true);} void initTable(){ dtm.setRowCount(0);try{ rs.beforeFirst();for(int i=1;i<1+pagesize*(page-1);i++)rs.next();int j=0;while(j Java程序设计简明教程 j++;Vector v1=new Vector();for(int i=1;i<=dbmd.getColumnCount();i++)v1.addElement(rs.getString(i));dtm.addRow(v1);} }catch(SQLException e){e.printStackTrace();} dtm.fireTableStructureChanged();this.getContentPane();} public int getcount(){ int n=0;try{ if(rs.last()){ n=rs.getRow();rs.beforeFirst();return n;}else return 0;}catch(SQLException e){System.out.println(”有异常抛出“);return 0;} } public void actionPerformed(ActionEvent e){ Vector title1=new Vector();if(e.getSource()==btn1){ String strs=(String)combSs.getSelectedItem();String sql=”select no ,“+strs.trim()+” from baseinf“;try{ stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);rs=stmt.executeQuery(sql);count=getcount();dbmd=rs.getMetaData();for(int i=1;i<=dbmd.getColumnCount();i++)title1.addElement(dbmd.getColumnName(i));dtm=new DefaultTableModel(null,title1);table=new JTable(dtm);}catch(Exception ee){System.out.println(ee);dispose();} initTable();p1=new JScrollPane(table);this.getContentPane().add(p1,”Center“);setTitle(”书目信息按某一列查询浏览“);this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);}});setSize(500,300);setVisible(true);} else if(e.getSource()==b1)page=1;else if(e.getSource()==b2){if(page>1)page=page-1;} else if(e.getSource()==b3){if(page 第”+page+“页