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

📄 fans.java

📁 一个java多线程工具
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.Font;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import java.util.*;

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

class FanFrame extends JFrame
{
   public FanFrame()
   {
      	setTitle("风扇");
      	Toolkit kit = Toolkit.getDefaultToolkit();
		Dimension screenSize = kit.getScreenSize();
		int screenHeight = screenSize.height;
		int screenWidth = screenSize.width;
		setSize(700,350);
		setLocation(screenWidth/4,screenHeight/4);

      	mainPanel panel = new mainPanel();      	
      	add(panel);
   }
}

class mainPanel extends JPanel
{
	private FanPanel p1;
	private FanPanel p2;
	private FanPanel p3;
	
	public mainPanel()
	{
		setLayout(new BorderLayout());
		JPanel bottomPanel = new JPanel();
		JButton startallButton = new JButton("StartAll");
		JButton stopallButton = new JButton("StopAll");
		bottomPanel.add(startallButton);
		bottomPanel.add(stopallButton);
		
		add(bottomPanel,BorderLayout.SOUTH);
		
		startallButton.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				p1.setRunning(true);
				p2.setRunning(true);
				p3.setRunning(true);
			}
		});
		stopallButton.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				p1.setRunning(false);
				p2.setRunning(false);
				p3.setRunning(false);
			}
		});
		
		//网格布局
		JPanel panel=new JPanel();
		panel.setLayout(new GridLayout(1,3));

		p1=new FanPanel();new Thread(new RunFan(p1)).start();
		p2=new FanPanel();new Thread(new RunFan(p2)).start();
		p3=new FanPanel();new Thread(new RunFan(p3)).start();
		 
		panel.add(p1);
		panel.add(p2);
		panel.add(p3);

		add(panel);

	}
}
class FanPanel extends JPanel
{
	private boolean isrunning = false;
	private boolean isreverse = false;
	private int startArc = 0;//绘制风扇的起始弧度
	private int rapid = 30;//控制转速
	public boolean getRunning()
	{
		return isrunning;
	}
	public void setRunning(boolean tof)
	{
		isrunning = tof;
	}
	public boolean getReverse()
	{
		return isreverse;
	}
	public void setReverse(boolean tof)
	{
		isreverse = tof;
	}
	public int getStartArc()
	{
		return startArc;
	}
	public void setStartArc(int i)
	{
		startArc = i;
	}
	public int getRapid()
	{
		return rapid;
	}
	public FanPanel()
	{
		//设置每个单独风扇面板的边界
		Border etched=BorderFactory.createLineBorder(Color.BLACK);
		setBorder(etched);

   		setLayout(new BorderLayout());
   		//单独的一个风扇面板
   		JPanel Fpanel = new JPanel();
   		JButton startButton = new JButton("Start");
   		JButton stopButton = new JButton("Stop");
   		JButton reverseButton = new JButton("Reverse");
   		Fpanel.add(startButton);
   		Fpanel.add(stopButton);
   		Fpanel.add(reverseButton);
   		add(Fpanel,BorderLayout.NORTH);
   		startButton.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				isrunning = true;
			}
		});

   		stopButton.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				isrunning = false;
			}
		});
		reverseButton.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent event)
			{
				isreverse = !getReverse();//设置反转标记为当前值的"反"
			}
		});
		//添加滑块
   		JPanel JSpanel = new JPanel();
   		JSlider slider = new JSlider(0,60,30);
   		slider.setPaintTicks(true);
   		slider.setPaintLabels(true);
   		slider.setSnapToTicks(true);
   		slider.setMajorTickSpacing(20);
   		slider.setMinorTickSpacing(5);
   		JSpanel.add(slider);
   		add(JSpanel,BorderLayout.SOUTH);
   		slider.addChangeListener(new ChangeListener()
   		{
   			public void stateChanged(ChangeEvent event)
   			{
   				JSlider source = (JSlider)event.getSource();
   				//获取滑块当前指示的值
   				rapid = source.getValue();
   			}
   		});
   		
   }
   
   public void paintComponent(Graphics g)
   {
	   super.paintComponent(g);
	   Graphics2D g2= (Graphics2D) g;
	   
	   double leftX = 20;
	   double topY = 50;
	   double width = 200;
	   double height = 150;
	   
	   Rectangle2D rect = new Rectangle2D.Double(leftX,topY,width,height);
	   
	   double centerX = rect.getCenterX();
	   double centerY = rect.getCenterY();
	   double radius = 75;
	   
	   Ellipse2D circle1 = new Ellipse2D.Double();
	   circle1.setFrameFromCenter(centerX,centerY,centerX+radius,centerY+radius);
	   g2.draw(circle1);
	   
	   Arc2D  a1=new Arc2D.Double(leftX+30,topY+5,2*(radius-5),2*(radius-5),startArc,30,Arc2D.PIE );
	   Arc2D  a2=new Arc2D.Double(leftX+30,topY+5,2*(radius-5),2*(radius-5),startArc+90,30,Arc2D.PIE );
	   Arc2D  a3=new Arc2D.Double(leftX+30,topY+5,2*(radius-5),2*(radius-5),startArc+180,30,Arc2D.PIE );
	   Arc2D  a4=new Arc2D.Double(leftX+30,topY+5,2*(radius-5),2*(radius-5),startArc+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 RunFan implements Runnable
{
	private FanPanel fanP;
	public RunFan(FanPanel p)
	{
		this.fanP = p;
   	}
   	
	public void run()
  	{
	   while(true)
	   {
	   	try
	    {
	    	Thread.sleep(100);
	    }
	    catch(InterruptedException e)
	    {
	       	e.printStackTrace();
	    }
	    if(fanP.getRunning())
	    {
	      if(fanP.getReverse())
	      {
	       	fanP.setStartArc((fanP.getStartArc()-fanP.getRapid())%360);
	      }
	      else
	      {
	       	fanP.setStartArc((fanP.getStartArc()+fanP.getRapid())%360);
	      }
	       		
	      fanP.repaint();
	    }
       }
   }
}

⌨️ 快捷键说明

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