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

📄 pengpanel.java.bak

📁 一个不错的JAVA程序
💻 BAK
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Timer;
import javax.swing.JPanel;
public class  PengPanel extends JPanel
{
	int x=40,y=30,dx=1,r=10,w=300,l=300;//坐标、x变化值、半径、长和宽
	int v=2,R=100,G=150,B=200,ddx=1;//控制参数
	double yv=30,k=0.75,b=0;
	private Timer timer;
	public JButton fast,slow,direction,pause,move;
	private JLabel label;

	public PengPanel() 
	{
		fast=new JButton("速度加倍");   //设置按钮
		slow=new JButton("速度减半");
		direction=new JButton("反方向");
		pause=new JButton("暂停");
		move=new JButton("继续");
		label=new JLabel("即时坐标:("+x+','+y+')');
		ButtonListener listener=new ButtonListener();
		fast.addActionListener(listener);
		slow.addActionListener(listener);
		direction.addActionListener(listener);
		pause.addActionListener(listener);
		move.addActionListener(listener);
		
		timer = new Timer();           //计时器
		timer.schedule(new MyTask(),0,v);

		setLayout(new GridLayout(0,1));//布局管理器
		setBorder(BorderFactory.createEmptyBorder(0,w+2*r,0,0));
		add(fast);
		add(slow);
		add(pause);
		add(move);
		add(direction);
		add(label);

		setBackground(Color.pink);
		setPreferredSize(new Dimension(w+2*r+110,l+2*r));
	}

	public void paintComponent(Graphics page)///画圆
	{
		super.paintComponent(page);
		page.drawLine(0,l+2*r,w+2*r,l+2*r);
		page.drawLine(w+2*r,0,w+2*r,l+2*r);
		page.setColor(new Color(R,G,B));
		page.fillOval(x,y,2*r,2*r);
	}

	private void ChangeColor()//改变颜色
	{
		B+=17;
		if(B>255){B=0;G++;}
		if(G>255){G=0;R++;}
		if(R>255){R=0;}
		if(B==0)System.out.println(G);
	}
	private void ChangeDirection()//改变方向
	{
		dx=-dx;
	}
	private void Fast()//速度加倍
	{
		if(v==0&&dx<20&&dx>-20)dx=dx*2;
		else v=(int)(v/2);
	}
	private void Slow()//速度减半
	{
		if(dx<2)v=2;
		else dx=dx/2;
	}
	private void Pause()//暂停
	{
		if(dx!=0){ddx=dx;dx=0;}
	}
	private void Move()//继续
	{
		if(dx==0)dx=ddx;
	}


  public class MyTask extends java.util.TimerTask
	{ 
      public void run()
		{
			if(dx!=0)//这里是核心算法,碰撞和运动时的坐标计算
				{
				x+=dx;
				yv=k*x+b;
				if(x>=w||x<=0)
				{
					dx=-dx;
					b=y+k*x;
					k=-k;
					if(x<=0)x=0;
					  else x=w;
				}
				if(yv>=l||yv<=0)
				{
					b=y+k*x;
					k=-k;
					if(yv<=0)yv=0;
					else yv=l;
				}
				y=(int)(yv);
				}

			ChangeColor();

			label.setText("即时坐标:("+x+','+y+')');//显示坐标
			repaint();//及时画圆
			       
		}
	}

	private class ButtonListener implements ActionListener//Button事件
	{
		public void actionPerformed(ActionEvent event)
		{
			if(event.getSource()==fast)Fast();
			else if(event.getSource()==slow)Slow();
			else if(event.getSource()==direction)ChangeDirection();
			else if(event.getSource()==pause)Pause();
			else if(event.getSource()==move)Move();
		}
	}
}

⌨️ 快捷键说明

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