北京信息科技大学Java语言程序设计-GUI.doc_第1页
北京信息科技大学Java语言程序设计-GUI.doc_第2页
北京信息科技大学Java语言程序设计-GUI.doc_第3页
北京信息科技大学Java语言程序设计-GUI.doc_第4页
北京信息科技大学Java语言程序设计-GUI.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【实验名称】实验5 Java GUI 【实验目的】 1、学习和掌握Java常用的GUI组件。 2、学习和掌握Java常用的布局管理器。 3、实习和掌握Java的事件驱动程序设计方法。 4、能够实现简单的Java GUI。 【实验步骤(解题过程)】 1、第一步,Java GUI静态界面的设计和实现,包括:组件和组件的摆放(布局管理器)。 2、第二步,Java GUI动态事件处理的设计与实现,需要Java事件驱动模型。 3、第三步,如果需要实体类支持,则按实验2的步骤实现实体类并使用。 【实验内容】 1、(移动小球)编写一个程序,在面板上移动小球。定义一个面板类来显示小球,并提供想做、向右、向上和向下移动小球的方法。 说明:程序来源编程练习16.3(P456)。可以不考虑小球移动到边界外的情况。 【实验预习】1. 问题描述:创建一个界面,通过鼠标点击按钮实现小球的上下左右移动。2. 输入;鼠标点击按钮;处理:通过事件监听,实现圆的重画;输出;显示出移动效果。3. 技术支持;需要用到事件监听,及圆的绘制即图形知识,布局管理器等。【附编程代码】import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class MovingBall extends JFrame private static JButton bleft=new JButton(向左);private static JButton bright=new JButton(向右);private static JButton bup=new JButton(向上);private static JButton bdown=new JButton(向下);private CirclePanel canvas = new CirclePanel(); public MovingBall() JPanel panel = new JPanel(); / 将按钮放入面板中 panel.add(bleft); panel.add(bright); panel.add(bup); panel.add(bdown); this.add(canvas, BorderLayout.CENTER); / 将含有圆的面板放在中央 this.add(panel, BorderLayout.SOUTH); /将含有按钮的面板放在右边 /创建按钮的监听器并注册到按钮 bleft.addActionListener(new Listener(); bright.addActionListener(new Listener(); bup.addActionListener(new Listener(); bdown.addActionListener(new Listener(); /主方法 public static void main(String args) JFrame frame = new MovingBall(); frame.setTitle(移动的小球); frame.setLocationRelativeTo(null); / Center the frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(480, 300); frame.setVisible(true); /监听类 class Listener implements ActionListener public void actionPerformed(ActionEvent e) System.out.println(new java.util.Date(e.getWhen(); if (e.getSource() = bleft) canvas.left(); else if (e.getSource() = bright) canvas.right(); else if (e.getSource() =bup) canvas.up(); else if (e.getSource() = bdown) canvas.down(); /含有一个圆的面板的类 class CirclePanel extends JPanel private int x =0; private int y = 0; /左移这个圆 public void left() x-; repaint(); /右移这个圆 public void right() x+; repaint(); /上移这个圆 public void up() y-; repaint(); /下移这个圆 public void down() y+; repaint(); /重画这个圆 protected void paintComponent(Graphics g) super.paintComponent(g); g.drawOval(getWidth()/2+x,getHeight()/2+y, 10, 10); 【实验过程及运行结果】在实验中遇到的问题是不会画圆,经过查书知道可以使用drawOval方法画圆。2、(创建一个简单的计算器)编写一个程序完成加、减、乘、除操作。 图5 简单的计算器 说明:程序来源编程练习16.4(P456)。文本框组件javax. swing.JTextField,请参见教材17.6小节(P473),或者Java API文档。字符串与数值之间的转换,请参见2.18.1小节(P44)和9.2.10小节(P247),或者使用字符串格式化方法9.2.11(P248)。 【实验预习】1. 问题描述:创建一个界面,利用鼠标点击加减乘除按钮,实现两个数之间的运算。2. 输入:在文本域中输入两个数字,并用鼠标点击按钮。处理:创建一个监听类,对按钮进行监听,计算两个数字之间的运算。输出:在结果文本域中显示运算结果3. 技术要求:需要使用布局管理器,事件监听,及字符串与数字之间的转换等。【附编程代码】import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;public class easyCalculation extends JFrameprivate JButton Add=new JButton(加);private JButton Subtract=new JButton(减);private JButton Multiply=new JButton(乘);private JButton Divide=new JButton(除);private JTextField one=new JTextField(5);private JTextField second=new JTextField(5);private JTextField all=new JTextField(10);private JLabel a=new JLabel(第一个数);private JLabel b=new JLabel(第二个数);private JLabel c=new JLabel(结果);public easyCalculation()FlowLayout panel=new FlowLayout(FlowLayout.CENTER, 20, 50);setLayout(panel); add(a); add(one); add(b); add(second); add(c); add(all); add(Add); add(Subtract); add(Multiply); add(Divide); Add.addActionListener(new Listener(); Subtract.addActionListener(new Listener(); Multiply.addActionListener(new Listener(); Divide.addActionListener(new Listener(); /主方法 public static void main(String args) easyCalculation frame = new easyCalculation(); frame.setTitle(简单的计算器); frame.setLocationRelativeTo(null); / Center the frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 200); frame.setVisible(true); class Listener implements ActionListener public void actionPerformed(ActionEvent e) System.out.println(new java.util.Date(e.getWhen(); if (e.getSource() = Add) double a1=Double.parseDouble(one.getText(); double b1=Double.parseDouble(second.getText(); all.setText(String.format(%.2f,a1+b1); else if (e.getSource() = Subtract) double a1=Double.parseDouble(one.getText(); double b1=Double.parseDouble(second.getText(); all.setText(String.format(%.2f,a1-b1); else if (e.getSource() = Multiply) double a1=Double.parseDouble(one.getText(); double b1=Double.parseDouble(second.getText(); all.setText(String.format(%.2f,a1*b1); else if (e.getSource() = Divide) double a1=Double.parseDouble(one.getText(); double b1=Double.parseDouble(second.getText(); all.setText(String.format(%.2f,a1/b1); 【实验过程及运行结果】在实验过程中遇到问题是,经常忘记添加接口或者继承。3、(创建一个投资值计算器)编写一个程序,计算投资值在给定利率以及给定投资年限下的未来值。计算公式参见编程练习16.5(P456)。当用户点击Calculate按钮时在文本域显示未来的总额。 【实验预习】1. 问题描述:这道题是创建一个GUI窗口,添加组建如图,通过点击按钮,计算未来收益。2. 输入:在前面三个文本域中分别写入投资总额,投资年限,年利率。过程:获取文本域的内容,计算未来收益。输出:将未来收益额显示在文本域中。3. 技术支持:用到了GUI基本组件,布局管理器,事件监听等。【附编程代码】import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.SwingConstants;public class investingCalculator extends JFrame/创建一个名为计算投资质的按钮private JButton calculate=new JButton(计算投资值);/创建投资总额、投资年限、年利率、未来收益值的文本域private JTextField investmentamount=new JTextField();private JTextField year=new JTextField();private JTextField annuallyInterstRate=new JTextField();private JTextField futureValue=new JTextField();investingCalculator()/将标签和文本域放入面板p1中JPanel p1=new JPanel(new GridLayout(5,2);p1.add(new JLabel(投资总额);p1.add(investmentamount);investmentamount.setHorizontalAlignment(SwingConstants.RIGHT);p1.add(new JLabel(投资年限);p1.add(year);year.setHorizontalAlignment(SwingConstants.RIGHT);p1.add(new JLabel(年利率);p1.add(annuallyInterstRate);annuallyInterstRate.setHorizontalAlignment(SwingConstants.RIGHT);p1.add(new JLabel(未来收益值);p1.add(futureValue);futureValue.setHorizontalAlignment(SwingConstants.RIGHT);futureValue.setEditable(false);/将按钮放在面板p2中JPanel p2=new JPanel(new FlowLayout(FlowLayout.RIGHT);p2.add(calculate);/将面板p1,p2放到框架frame里add(p1,BorderLayout.CENTER);add(p2,BorderLayout.SOUTH);/创建一个监听器并注册到按钮calculate.addActionListener(new ActionListener()Override/实现点击按钮计算出未来收益并显示在文本域中public void actionPerformed(ActionEvent e) / TODO Auto-generated method stubif(e.getSource()=calculate)double amount=Double.parseDouble(investmentamount.getText();double yearlimit=Double.parseDouble(year.getText();double rate=Double.parseDouble(annuallyInterstRate.getText();futureValue.setText(String.format(%.2f, amount*Math.pow(1+rate/1200), yearlimit*12););/主方法public static void main(Stringargs)investingCalculator frame=new investingCalculator();frame.setTitle(投资值计算器);frame.setSize(500,300);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);【实验过程及运行结果】遇到问题是不会讲未来收益的文本域改为不可编辑。解决方法是应该调用setEditable(false);【思考题】 1、在上述练习中,你是否使用了匿名内部类来实现监听器类?如果是,说明你是如何使用的(可以使用代码片段)?如果不是,那么使用匿名内部类如何实现监听器类呢? 有。calculate.addA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论