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