⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controlfans.java

📁 1.JAVA的图形设计功能在面板上画三个风扇 2.使用多线程控制三个风扇的开始和停止
💻 JAVA
字号:
// 实验二十 风扇
// 熟悉图形绘制、事件处理、多线程和使用Swing编制图形化用户界面

import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.Font;
import java.lang.Thread;


public class ControlFans
{
	public static void main(String[] args)
	{
		DrawFrame frame = new DrawFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}


class DrawFrame extends JFrame
{
	public DrawFrame()
	{
		setTitle("实验二十 风扇");//设置标题
		setSize(800,300);
		setLocation(100,100);  //设置位置

		aPanel a=new aPanel();//添加面板
		add(a);
	}

}

class aPanel extends JPanel
{
	//三个风扇线程
	private DrawPanel p1;
	private DrawPanel p2;
	private DrawPanel p3;

	public aPanel()
	{
		setLayout(new BorderLayout());

		JPanel p=new JPanel();
		JButton a=new JButton("Start All");p.add(a);
		a.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				p1.setrunning(true);
				p2.setrunning(true);
				p3.setrunning(true);
			}
		});
		JButton b=new JButton("Stop  All");p.add(b);
		b.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				p1.setrunning(false);
				p2.setrunning(false);
				p3.setrunning(false);
			}
		});
		add(p,BorderLayout.SOUTH);

		JPanel panel=new JPanel();
		panel.setLayout(new GridLayout(1,3));

		 p1=new DrawPanel(0);new Thread(new fengche(p1)).start();
		 p2=new DrawPanel(0);new Thread(new fengche(p2)).start();
		 p3=new DrawPanel(0);new Thread(new fengche(p3)).start();


		panel.add(p1);
		panel.add(p2);
		panel.add(p3);

		add(panel);
	}
}

  class DrawPanel extends JPanel
{
	private boolean running=false;
	public boolean getrunning(){return running;}
	public void setrunning(boolean p){running=p;}




	private int o;
	public void seto(int o){this.o=o;}
	public int geto(){return o;}

	private boolean reverse=true;
	public void setreverse(boolean c){reverse=c;}
	public boolean getreverse(){return reverse;}

	public DrawPanel(int o)
	{
		//设置边界
		Border etched=BorderFactory.createLineBorder(Color.BLACK);
		setBorder(etched);
		this.o=o;
		setLayout(new BorderLayout());

		JPanel p=new JPanel();
		JButton a=new JButton("Start ");
		p.add(a);
		// 事件监听器
		a.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				running=true;
			}
		});

		JButton b=new JButton("Stop  ");
		p.add(b);
		b.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				running=false;
			}
		});

		JButton c=new JButton("Reverse");
		p.add(c);
		c.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				reverse=!getreverse();
			}
		});

		add(p,BorderLayout.NORTH);

		DPanel h=new DPanel();
		add(h);
	}

private class  DPanel extends JPanel
{
	private int xx=130;  //定义x方向的原点
	private int yy=90;	//定义y方向的原点
	private int r=80; //半径

	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		Graphics2D g2=(Graphics2D) g;

		g2.translate(xx,yy);  //将原点重新定位

		//画圆
		Ellipse2D e=new Ellipse2D.Double();
		e.setFrameFromCenter(0,0,r+10,r+10);
		g2.draw(e);

		//画弧
		Arc2D  a1=new Arc2D.Double(-r,-r,2*r,2*r,o,30,Arc2D.PIE );
		Arc2D  a2=new Arc2D.Double(-r,-r,2*r,2*r,o+90,30,Arc2D.PIE );
		Arc2D  a3=new Arc2D.Double(-r,-r,2*r,2*r,o+180,30,Arc2D.PIE );
		Arc2D  a4=new Arc2D.Double(-r,-r,2*r,2*r,o+270,30,Arc2D.PIE );
		g2.draw(a1);g2.draw(a2);g2.draw(a3);g2.draw(a4);
		g2.setPaint(Color.RED);
		g2.fill(a1);g2.fill(a2);g2.fill(a3);g2.fill(a4);

		repaint();
	}
  }
}

//线程
class fengche implements Runnable
{
	private DrawPanel q;
	public fengche(DrawPanel q)
	{
		this.q=q;
	}
	public void run()
	{
		while(true)
		{
			try
			{
				Thread.sleep(100);
			}
			catch(InterruptedException e)
			{
				e.printStackTrace();
	        }
			if(q.getrunning())
			{
				if(q.getreverse())
					q.seto((q.geto()+30)%360);
				else
					q.seto((q.geto()-30)%360);
				q.repaint();
			}
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -