Java程序设计(七)

综合实验

实验编号: 实验七
实验主题: 综合实验
实验目的: (1)掌握图形化用户界面的设计和实现; (2)掌握文件的处理; (3)掌握事件处理的方法; (4)掌握多线程的设计和实现; (5)掌握图形绘制的方法。
实验要求: (1)综合掌握实验中涉及的多个知识点; (2)在NetBeans或Eclipse环境下完成选做实验内容; (3)认真撰写完整的实验报告。
实验步骤: (1)设计类和程序的结构; (2)在NetBeans或Eclipse中创建工程; (3)设计和实现图形化用户界面中的各种组成部件; (4)为图形化用户界面添加事件处理; (5)编译、调试、运行和发布程序。
实验提示: (1)程序发布可以使用集成化开发环境中的提供的工具; (2)可通过学习开发环境自带的帮助文件熟悉开发环境的使用。

题目7-1:简单文本编辑器
该程序可以新建、打开、编辑和保存文本文件。当用户点击New时,新建一个文件,用户可以编辑文件内容,然后点击Save保存文件。用户点击Open时,选择一个已有文件,然后可对文件进行编辑。示例输出如图所示。
在这里插入图片描述
在这里插入图片描述

在这里插入代码片

题目7-2:风扇
编写程序,显示3个风扇,用控制按钮开动和停止风扇。可以同时开动和停止3个风扇,也可以分别开动和停止每一个风扇。输出示例如图所示。
在这里插入图片描述
分了四个类写完的,完成了上面的所有功能,这个Rev…我推测是reverse,改变旋转方向的,下面的滑块条改变转动速度的。
结果:
在这里插入图片描述
代码如下:
FanPanel:实现了风扇的绘制与旋转。

package test7;

import javax.swing.*;
import java.awt.*;

public class FanPanel extends JPanel{
	int angle1 = 10, angle2 = 100, angle3 = 190, angle4 = 280;
	int c;
	int x;
//	重写paint方法
	public void paint(Graphics g) {
//		必须先调用父类的paint方法
		super.paint(g);
		
		int x = 56;
		int y =55;
		int w = 170;
		int h = 170;
		g.drawArc(51, 50, 180, 180, 0, -360);
		g.drawLine(299, 0, 299, 260);
//		绘制扇形
		g.setColor(Color.red);
//		g.fillArc(x, y, width, height, startAngle, arcAngle);
//		fillArc代表填充图,startAngle代表开始弧度,arcAngle代表偏转角度
//		可通过测试g.fillArc(0, 0, 100, 200, 0, 90)明白各个含义
		g.fillArc(x, y, w, h, angle1 + c, -30);
		g.fillArc(x, y, w, h, angle2 + c, -30);
		g.fillArc(x, y, w, h, angle3 + c, -30);
		g.fillArc(x, y, w, h, angle4 + c, -30);
		
		
	}
//   旋转
	public void Rotate(int num, int rev) {
		if(rev % 2 == 0) c += x;
		else c -= x;
		try  
        {  
            Thread.sleep(100/num);  
        }catch(Exception e)  
        {     
            e.printStackTrace();  
        }  
        repaint();  
	}
	
}

FanFrame:实现了各个按钮和风扇的布局,整个页面架起来了。

package test7;

import javax.swing.*;
//import java.awt.*;
import java.awt.event.*;

public class FanFrame extends JFrame implements ActionListener,AdjustmentListener{
//	flag_n代表第n个风扇是否开始
	boolean flag_1 = false;
	boolean flag_2 = false;
	boolean flag_3 = false;
//	是否改变旋转方向
	int rev_1 = 0;
	int rev_2 = 0;
	int rev_3 = 0;
//	第一个风扇按钮与滑动条
	JButton start1 = new JButton("Strat");
	JButton stop1 = new JButton("Stop");
	JButton reverse1 = new JButton("Reverse");
	JScrollBar speed1 =new JScrollBar(JScrollBar.HORIZONTAL,1,10,0,50);
//	第二个风扇按钮与滑动条
	JButton start2 = new JButton("Strat");
	JButton stop2 = new JButton("Stop");
	JButton reverse2 = new JButton("Reverse");
	JScrollBar speed2 =new JScrollBar(JScrollBar.HORIZONTAL,10,10,0,50);
//	第三个风扇按钮与滑动条
	JButton start3 = new JButton("Strat");
	JButton stop3 = new JButton("Stop");
	JButton reverse3 = new JButton("Reverse");
	JScrollBar speed3 =new JScrollBar(JScrollBar.HORIZONTAL,20,10,0,50);
//	全部开始与全部结束
	JButton start = new JButton("Start All");
	JButton stop = new JButton("Stop All");
//	三个panel
	FanPanel p1 = new FanPanel();
	FanPanel p2 = new FanPanel();
	FanPanel p3 = new FanPanel();
	
	public FanFrame() {
//		设置Frame基本属性
		setTitle("Three-Fan");
		setBounds(200, 100, 915, 400);
		setVisible(true);
		setLayout(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		start.setBounds(300, 300, 100, 50);
		start.addActionListener(this);
		stop.setBounds(450, 300, 100, 50);
		stop.addActionListener(this);
		add(start);
		add(stop);
		
		
		p1.setLayout(null);	
		add(p1);
		p2.setLayout(null);
		add(p2);
		p3.setLayout(null);
		add(p3);
//		
		p1.setBounds(0, 0, 300, 300);
		p3.setBounds(600, 0, 300, 300);
		p2.setBounds(300, 0, 300, 300);
		
//		设置p1按钮
		start1.setBounds(0, 0, 100, 30);
		start1.addActionListener(this);
		stop1.setBounds(100, 0, 100, 30);
		stop1.addActionListener(this);
		reverse1.setBounds(200, 0, 100, 30);
		reverse1.addActionListener(this);
		speed1.setBounds(0, 242, 300, 20);
		p1.x = speed1.getValue();
		speed1.addAdjustmentListener(this);
		
//		speed1.addAdjustmentListener(new AdjustmentListener() {
//			   public void adjustmentValueChanged(AdjustmentEvent e) {
//				   p1.c = e.getValue();
//			   }

//		设置p2按钮
		start2.setBounds(0, 0, 100, 30);
		start2.addActionListener(this);
		stop2.setBounds(100, 0, 100, 30);
		stop2.addActionListener(this);
		reverse2.setBounds(200, 0, 100, 30);
		reverse2.addActionListener(this);
		speed2.setBounds(0, 242, 300, 20);
		p2.x = speed2.getValue();
		speed2.addAdjustmentListener(this);
		
//		设置p3按钮
		start3.setBounds(0, 0, 100, 30);
		start3.addActionListener(this);
		stop3.setBounds(100, 0, 100, 30);
		stop3.addActionListener(this);
		reverse3.setBounds(200, 0, 100, 30);
		reverse3.addActionListener(this);
		speed3.setBounds(0, 242, 300, 20);
		p3.x = speed3.getValue();
		speed3.addAdjustmentListener(this);
		
		
//		添加p1按钮
		p1.add(stop1);
		p1.add(start1);
		p1.add(reverse1);
		p1.add(speed1);
//		添加p2按钮
		p2.add(stop2);
		p2.add(start2);
		p2.add(reverse2);
		p2.add(speed2);
//		添加p3按钮
		p3.add(stop3);
		p3.add(start3);
		p3.add(reverse3);
		p3.add(speed3);
		
	}
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == start1) {
			flag_1 = true;
		}
		else if(e.getSource() == stop1) {
			flag_1 = false;
		}
		else if(e.getSource() == reverse1) {
			rev_1 = (rev_1 + 1) % 10;
		}
		else if(e.getSource() == start2) {
			flag_2 = true;
		}
		else if(e.getSource() == stop2) {
			flag_2 = false;
		}
		else if(e.getSource() == reverse2) {
			rev_2 = (rev_2 + 1) % 10;
		}
		else if(e.getSource() == start3) {
			flag_3 = true;
		}
		else if(e.getSource() == stop3) {
			flag_3 = false;
		}
		else if(e.getSource() == reverse3) {
			rev_3 = (rev_3 + 1) % 10;
		}
		else if(e.getSource() == start) {
			flag_1 = true;
			flag_2 = true;
			flag_3 = true;
		}
		else if(e.getSource() == stop) {
			flag_1 = false;
			flag_2 = false;
			flag_3 = false;
		}
	}
	public void adjustmentValueChanged(AdjustmentEvent e) {
		if ((JScrollBar) e.getSource() == speed1)
			p1.x = e.getValue();// e.getValue()所得的值与scrollBar1.getValue()所得的值一样。
		if ((JScrollBar) e.getSource() == speed2)
			p2.x = e.getValue();
		if ((JScrollBar) e.getSource() == speed3)
			p3.x = e.getValue();
	}


}

FanRun:进程,调用函数,实现风扇的运行。

package test7;

import java.util.concurrent.locks.*;
import javax.swing.*;

public class FanRun extends Thread{
	FanFrame f = new FanFrame();
	public FanRun() {
		run();
	}
	final Lock l = new ReentrantLock();
	public void run() {
		while(true) {
			l.lock();
			if(f.flag_1==false&&f.flag_2==false&&f.flag_3==false) {
				continue;
			}
			else if(f.flag_1==true&&f.flag_2==false&&f.flag_3==false) {
				f.p1.Rotate(1, f.rev_1);
			}
			else if(f.flag_1==false&&f.flag_2==true&&f.flag_3==false) {
				f.p2.Rotate(1, f.rev_2);
			}
			else if(f.flag_1==false&&f.flag_2==false&&f.flag_3==true) {
				f.p3.Rotate(1, f.rev_3);
			}
			else if(f.flag_1==true&&f.flag_2==true&&f.flag_3==false) {
				f.p1.Rotate(2, f.rev_1);
				f.p2.Rotate(2, f.rev_2);
			}
			else if(f.flag_1==true&&f.flag_2==false&&f.flag_3==true) {
				f.p1.Rotate(2, f.rev_1);
				f.p3.Rotate(2, f.rev_3);
			}
			else if(f.flag_1==false&&f.flag_2==true&&f.flag_3==true) {
				f.p3.Rotate(2, f.rev_3);
				f.p2.Rotate(2, f.rev_2);
			}
			else if(f.flag_1==true&&f.flag_2==true&&f.flag_3==true) {
				f.p1.Rotate(3, f.rev_1);
				f.p2.Rotate(3, f.rev_2);
				f.p3.Rotate(3, f.rev_3);
			}
			l.unlock(); 
		}
	}
	
}

FanMain:主函数

package test7;

public class FanMain {
	public static void main(String[] args) {
		FanRun A = new FanRun();
		FanRun B = new FanRun();
		FanRun C = new FanRun();
		A.start();
		B.start();
		C.start();
	}
}

题目7-3:画笔
编写应用程序,可以绘制图形、保存绘制结果和打开已绘图形。可以选择要绘制图形的形状和颜色,选择是否填充,绘制相应的图形,并且可保存到文件中。示例输出如图所示。
在这里插入图片描述
没写,但是网上找到个很有用的教程,照着应该能写出来。 java画图板

在这里插入代码片

题目7-4:拼图游戏
编写拼图游戏程序,拼图由33方格组成。将原始图像分成33个方块,打乱顺序后放入方格中,用户通过移动方格将图像恢复为原始图像。 程序包括多张原始图像,每次随机选择一个图像。示例输出如图所示。
在这里插入图片描述

在这里插入代码片

题目7-5:图书借阅第三版
修改Java程序设计(六)中的图书借阅版本2,将数据保存在数据库中或文件中,采用图形化用户界面,实现图书的入库,借阅和归还。

在这里插入代码片

题目7-6:计算器
编写程序,实现一个计算器,可以进行+,-,,/的运算。操作步骤:用户通过鼠标点击输入第一个操作数,点击+,-,,/按钮选择运算,然后输入第二个操作数,最后点击=按钮,在文本框中显示计算结果。用户点击数字按钮时,文本域中显示已经输入的数字,可以输入整数和小数。用户点击+,-,*,/时,文本域清空,准备显示下一个操作数。示例输出如图所示。
在这里插入图片描述

在这里插入代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值