计算机工程系实验报告课程名称:Java程序设计实验项目名称:基于JAVA的图形用户界面设计技术基础班级:计科14-4班姓名: 李雪瑞学号: 20140902413一、实验目的:(1)掌握Java Swing组建的使用方法,包括窗口、框架、对话框、面板、文本编辑框、按钮、组合框等多种布局方式,掌握窗口菜单和快捷菜单设计方式。
(2)掌握多种布局方式;(3)掌握窗口菜单和快捷菜单设计方式,熟悉在组件上绘图的方法;(4)设计出具有图形用户界面的、能够响应事件的Java应用程序;(5)掌握在MyEclipse集成开发环境中,通过设置编译路径引用其他项目中声明的类。
二、实验要求:1.编写一个应用程序,要求有一个含有菜单的窗口,窗口中有文本区组件。
菜单有“打开文件”的菜单项,当单击该菜单项时,使用一个输入流将一个名为“hello.txt”文件的内容读入到文本中。
2. 编写有两个文本区的应用程序。
当我们在一个文本区中输入若干个数时,另一个文本区同时对输入的数进行求和运算并求出平均值,也就是说随着输入的变化,另一个文本区不断地更新求和及平均值。
3. 编写一个应用程序,有8个按钮,用户通过按动键盘上的方向键移动这些按钮。
4. 编写一个应用程序,用户可以在一个文本框里输入数字字符,按回车后将数字存入一个文件。
当输入的数字大于1000时,弹出一个有模式的对话框,提示用户数子已经大于1000.5. 实现计算器的加、减、乘、除等基本运算。
三、完成程序:1.import java.awt.*;import java.io.*;import javax.swing.*;import java.awt.event.*;publicclass Zuoye1{publicstaticvoid main(String args[]){new winopen();}}class winopen extends JFrame implements ActionListener{ JMenu menu;JMenuBarmb;JMenuItem mi;JTextArea text;winopen(){mi=new JMenuItem("打开文件");mi.addActionListener(this);menu=new JMenu("菜单");menu.add(mi);mb=new JMenuBar();mb.add(menu);setJMenuBar(mb);text=new JTextArea();add(new JScrollPane(text),BorderLayout.CENTER);setTitle("打开文件");setBounds(400,150,400,300);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);validate();}publicvoid actionPerformed(ActionEvent e){openfile op=new openfile();text.setText(op.open());}}class openfile{public String open(){File file=new File("E:/hello.txt");int n=0;char b[]=newchar[100];StringBuffersb=new StringBuffer(new String(""));try{FileReader reader=new FileReader(file);while((n=reader.read(b,0,10))!=-1){sb.append(new String(b,0,n));}reader.close();}catch(IOException e){ System.out.println(e);}return sb.toString();}}实验结果抓图及分析:窗口菜单项打开“hello.txt”文件此程序使用JMenuBar创建窗口和菜单,再使用JTextArea创建文本框。
然后使用输入流从文件“hello.txt”中读取文本信息。
输入流提供一条通道程序,可以使用这条通道读取“源”(即“hello.txt”文件)中的数据。
使得程序得以执行。
2.import javax.swing.*;import java.util.StringTokenizer;import java.awt.*;import java.awt.event.*;import javax.swing.event.*;publicclass Zuoye2{ publicstaticvoid main(String args[]){ ComputerFramefr=new ComputerFrame();fr.setTitle("计算的窗口");}}class ComputerFrame extends JFrame implements DocumentListener{ JTextArea text1,text2;int count=1;double sum=0,aver=0;public ComputerFrame(){ 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);addWindowListener(new WindowAdapter(){ publicvoid windowClosing(WindowEvent e){ System.exit(0);}});validate();}publicvoid changedUpdate(DocumentEvent e){ //接口方法hangdleText(); //调用后面的hangdleText()方法 }publicvoid removeUpdate(DocumentEvent e){ //接口方法changedUpdate(e);}publicvoid insertUpdate(DocumentEvent e){ //接口方法changedUpdate(e);}publicvoid hangdleText(){String s=text1.getText();sum=0;aver=0;StringTokenizerfenxi=new StringTokenizer(s," ,'\n'");int n=fenxi.countTokens();count=n;double a[]=newdouble[n];for(int i=0;i<=n-1;i++){ String temp=fenxi.nextToken();try { a[i]=Double.parseDouble(temp);sum=sum+a[i];}catch(Exception ee){ count--;}}aver=sum/count;text2.setText(null);text2.append("\n和:"+sum);text2.append("\n平均值:"+aver);}}实验结果抓图及分析:窗口设置计算求和和均值程序使用JTextArea创建了两个文本区,当一个文本区输入数字时,另一个文本区就使用String从前边的文本区中读取数据。
然后进行计算,使用append(String s)方法在结尾加上文本,在另一个文本区中输出结果。
3.import java.awt.*;import java.awt.event.*;import javax.swing.*;publicclass Zuoye3{publicstaticvoid main(String args[]){Win win=new Win();}}class Win extends JFrame implements KeyListener{ JButtonb[]=new JButton[8];int x,y;Win(){setLayout(new FlowLayout());for(int i=0;i<8;i++) {b[i]=new JButton(""+i);b[i].addKeyListener(this);add(b[i]);}addWindowListener(new WindowAdapter() { publicvoid windowClosing(WindowEvent e){ System.exit(0);}});setBounds(10,10,300,300);setVisible(true);validate();}publicvoid keyPressed(KeyEvent e){int moveDistance=1;Component com=(Component)e.getSource(); int x=(int)com.getBounds().x;int y=(int)com.getBounds().y;if(e.getKeyCode()==KeyEvent.VK_UP){y=y-moveDistance;com.setLocation(x,y);Rectangle comRect=com.getBounds(); for(int k=0;k<b.length;k++){ RectangleorthRect=b[k].getBounds();if(comRect.intersects(orthRect)&&com!=b[k]) { y=y+moveDistance;com.setLocation(x,y);break;}}if(y<=0) y=10;}elseif(e.getKeyCode()==KeyEvent.VK_DOWN){ y=y+moveDistance;com.setLocation(x,y);Rectangle comRect=com.getBounds(); for(int k=0;k<b.length;k++){ RectangleorthRect=b[k].getBounds();if(comRect.intersects(orthRect)&&com!=b[k]) { y=y-moveDistance;com.setLocation(x,y);break;}}if(y>=300) y=300;}elseif(e.getKeyCode()==KeyEvent.VK_LEFT) { x=x-moveDistance;com.setLocation(x,y);Rectangle comRect=com.getBounds(); for(int k=0;k<b.length;k++){ RectangleorthRect=b[k].getBounds();if(comRect.intersects(orthRect)&&com!=b[k]) { x=x+moveDistance;com.setLocation(x,y);break;}}if(x<=0) x=0;}elseif(e.getKeyCode()==KeyEvent.VK_RIGHT) { x=x+moveDistance;com.setLocation(x,y);Rectangle comRect=com.getBounds(); for(int k=0;k<b.length;k++){ RectangleorthRect=b[k].getBounds();if(comRect.intersects(orthRect)&&com!=b[k]) { x=x-moveDistance;com.setLocation(x,y);break;}}if(x>=300) x=300;}}publicvoid keyTyped(KeyEvent e) {}publicvoid keyReleased(KeyEvent e) {}}实验结果抓图及分析:窗口和按钮设计利用键盘方向键进行移动程序首先使用JButton类创建8个按钮并标号,然后使用keyPressed()方法创建键盘事件。