📄 fan.java
字号:
import javax.swing.*;
import java.awt.*;
public class Fan extends JPanel implements Runnable
{
private Thread control = null;
private int xCenter, yCenter;
private int fanRadius, bladeLength;
private int angle = 100;
private int direction = 1;
private int speed = 10;
private boolean suspended = false;
public Fan()
{
control = new Thread(this);
control.start();
}
public synchronized void resume()
{
if (suspended)
{
suspended = false;
notify();
}
}
public synchronized void suspend()
{
suspended = true;
}
public void reverse()
{
direction = -direction;
}
public void setSpeed(int ms)
{
speed = ms;
}
public void run()
{
while (true)
{
repaint();
try
{
Thread.sleep(speed);
waitForNotificationToResume();
}
catch (InterruptedException ex)
{
}
}
}
private synchronized void waitForNotificationToResume()
throws InterruptedException
{
while (suspended)
wait();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
fanRadius = (int)(Math.min(getSize().width, getSize().height)*0.9*0.5);
xCenter = (getSize().width)/2;
yCenter = (getSize().height)/2;
bladeLength = (int)(fanRadius*0.9);
angle = (angle+direction)%360;
g.setColor(Color.blue);
g.drawOval(xCenter - fanRadius,yCenter - fanRadius,
2*fanRadius, 2*fanRadius);
drawBlade(g, angle);
g.setColor(Color.red);
drawBlade(g, angle+120);
g.setColor(Color.green);
drawBlade(g, angle+240);
g.setColor(Color.yellow);
}
private void drawBlade(Graphics g, int angle)
{
g.fillArc(xCenter-bladeLength, yCenter-bladeLength,
2*bladeLength, 2*bladeLength, angle, 50);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -