📄 controlfans.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 + -