📄 example7_5_1.java
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
//定义弹子类
class Marble extends Canvas implements Runnable
{
//定义
int intWidth, intHeight; //“台子”区域范围:宽和高
int intNumber; //弹子数量
int intSizeMax, intSizeMin; //弹子半径取值范围
double dblSpeedMax, dblSpeedMin; //弹子运行速度取值范围
double dblQiu[][]; //弹子二维数组:弹子标号、坐标、速度及大小,其中:
//[弹子id][0] 表示X坐标
//[弹子id][1] 表示Y坐标
//[弹子id][2] 表示弹子的x方向速度
//[弹子id][3] 表示弹子的y方向速度
//[弹子id][4] 表示弹子的x半径
//[弹子id][5] 表示弹子的y半径
long logDelay; //延时时间(1/刷新率)
//画布构造方法
Marble()
{
//设置画布
this.setBounds(0, 0, intWidth, intHeight); //位置和大小
this.setBackground(Color.cyan); //背景
this.setVisible(true);
//构造弹子,设置初始值(用户可以在运行时通过操作界面改变其值)
marbleInit(5, 30, 15, 5, -5);
//线程
Thread danzi = new Thread(this); //新建线程对象
danzi.start(); //线程trdDonghua 开始执行
}
public void marbleInit(int Num, int SMax, int SMin,
double SdMax, double SdMin)
{
intWidth = 400; //宽
intHeight = 300; //高
intNumber = Num; //数量
intSizeMax = SMax; //弹子半径最大值
intSizeMin = SMin; //弹子半径最小值
dblSpeedMax = SdMax; //速度最大值
dblSpeedMin = SdMin; //速度最小值
dblQiu = new double[intNumber][6]; //点坐标 及速度 二维数组
logDelay = 20; //延时时间(1/刷新率)
//随机产生弹子的坐标和速度
for (int i = 0; i <= intNumber - 1; i++) {
dblQiu[i][4] = (Math.random() * (intSizeMax - intSizeMin) + intSizeMin);
dblQiu[i][5] = dblQiu[i][4];
dblQiu[i][0] = (Math.random() * (intWidth - dblQiu[i][4] - dblQiu[i][4])
+ dblQiu[i][4]); //x坐标 范围0-intWidth
dblQiu[i][1] = (Math.random() * (intHeight - dblQiu[i][4] - dblQiu[i][5])
+ dblQiu[i][5]); //y坐标 范围0-intHeitht
dblQiu[i][2] = (Math.random() * (dblSpeedMax - dblSpeedMin) +
dblSpeedMin); //速度范围 dblSpeedMax-dblSpeedMin
dblQiu[i][3] = (Math.random() * (dblSpeedMax - dblSpeedMin) +
dblSpeedMin); //速度范围 dblSpeedMax-dblSpeedMin
}
}
//绘图 paint方法
public void paint(Graphics g) {
//画弹子
for (int i = 0; i <= intNumber - 1; i++) { //intNumber次循环
dblQiu[i][0] += dblQiu[i][2]; //坐标递增 以实现移动
dblQiu[i][1] += dblQiu[i][3];
if (dblQiu[i][0] > (double) intWidth - dblQiu[i][4] ||
dblQiu[i][0] < 0)
{ //超过台子边界x后,反方向运行
dblQiu[i][2] = ( -dblQiu[i][2]);
}
if (dblQiu[i][1] > (double) intHeight - dblQiu[i][5] ||
dblQiu[i][1] < 0)
{ //超过台子边界y后,反方向运行
dblQiu[i][3] = ( -dblQiu[i][3]);
}
g.setColor(Color.black); //弹子为黑色
g.fillOval( (int) dblQiu[i][0], (int) dblQiu[i][1],
(int) dblQiu[i][4], (int) dblQiu[i][5]); //画圆
g.setColor(Color.white); //弹子上的亮点为白色
g.fillOval((int) (dblQiu[i][0] + dblQiu[i][4] * (0.15)),
(int) (dblQiu[i][1] + dblQiu[i][5] * (0.15)),
(int) (dblQiu[i][4] * (0.3)),
(int) (dblQiu[i][5] * (0.25)));
}
}
//弹子线程_重绘图形
public void run() {
for (; ; )
{
try {
Thread.sleep(logDelay);//停止logDelay毫秒
}catch (InterruptedException e) { }
repaint(); //重绘图形
}
}
}
/* 定义主窗体类 */
public class Example7_5 extends JFrame implements ActionListener
{
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JLabel jLabel3 = new JLabel();
JLabel jLabel4 = new JLabel();
JLabel jLabel5 = new JLabel();
JTextField jTextField1 = new JTextField();
JTextField jTextField2 = new JTextField();
JTextField jTextField3 = new JTextField();
JTextField jTextField4 = new JTextField();
JTextField jTextField5 = new JTextField();
JButton jButton1 = new JButton();
//建立弹子类对象
Marble marble = new Marble();
public Example7_5() {
try {jbInit(); }
catch (Exception e) { e.printStackTrace(); }
}
public static void main(String[] args) {
Example7_5 winFrame = new Example7_5();
winFrame.setBounds(200, 100, 417, 336 + 50);
winFrame.setVisible(true);
}
private void jbInit() throws Exception
{
this.getContentPane().setLayout(null);
//设置各组件位置及初值
marble.setBounds(new Rectangle(5, 5, 400, 300));
jTextField3.setBounds(new Rectangle(115, 329, 31, 21));
jTextField3.setText("15");
jTextField3.setSelectionStart(11);
jTextField2.setBounds(new Rectangle(65, 329, 31, 21));
jTextField2.setText("30");
jTextField2.setSelectionStart(11);
jTextField1.setVerifyInputWhenFocusTarget(true);
jTextField1.setEditable(true);
jTextField1.setSelectionStart(11);
jTextField1.setText("5");
jTextField1.setBounds(new Rectangle(15, 329, 31, 21));
jTextField5.setBounds(new Rectangle(214, 329, 31, 21));
jTextField5.setText("-5");
jTextField5.setSelectionStart(1);
jTextField4.setBounds(new Rectangle(165, 329, 31, 21));
jTextField4.setText("5");
jTextField4.setEnabled(true);
jTextField4.setSelectionStart(11);
jButton1.setVerifyInputWhenFocusTarget(true);
jButton1.setSelected(false);
jLabel2.setRequestFocusEnabled(true);
this.getContentPane().add(marble, null);//添加弹子类对象到面板
this.getContentPane().setBackground(SystemColor.control);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setEnabled(true);
this.setLocale(java.util.Locale.getDefault());
this.setResizable(false);
this.setTitle("弹子球");
jLabel1.setFont(new java.awt.Font("Dialog", 0, 12));
jLabel1.setVerifyInputWhenFocusTarget(true);
jLabel1.setText("数量");
jLabel1.setBounds(new Rectangle(17, 310, 39, 18));
jLabel2.setText("直径Max");
jLabel2.setBounds(new Rectangle(59, 310, 49, 18));
jLabel2.setVerifyInputWhenFocusTarget(true);
jLabel2.setFont(new java.awt.Font("Dialog", 0, 12));
jLabel3.setFont(new java.awt.Font("Dialog", 0, 12));
jLabel3.setOpaque(false);
jLabel3.setRequestFocusEnabled(true);
jLabel3.setVerifyInputWhenFocusTarget(true);
jLabel3.setText("直径Min");
jLabel3.setBounds(new Rectangle(109, 310, 49, 18));
jLabel4.setFont(new java.awt.Font("Dialog", 0, 12));
jLabel4.setToolTipText("");
jLabel4.setVerifyInputWhenFocusTarget(true);
jLabel4.setText("速度Max");
jLabel4.setBounds(new Rectangle(160, 310, 49, 18));
jLabel5.setText("速度Min");
jLabel5.setBounds(new Rectangle(210, 310, 49, 18));
jLabel5.setVerifyInputWhenFocusTarget(true);
jLabel5.setRequestFocusEnabled(true);
jLabel5.setOpaque(false);
jLabel5.setFont(new java.awt.Font("Dialog", 0, 12));
jButton1.setBounds(new Rectangle(267, 313, 137, 37));
jButton1.setFont(new java.awt.Font("Dialog", 0, 12));
jButton1.setForeground(Color.black);
jButton1.setToolTipText("");
jButton1.setText("重新开始");
jButton1.addActionListener(this);
//添加标签和文本组件及按钮到面板
this.getContentPane().add(jLabel1, null);
this.getContentPane().add(jLabel2, null);
this.getContentPane().add(jLabel3, null);
this.getContentPane().add(jLabel4, null);
this.getContentPane().add(jLabel5, null);
this.getContentPane().add(jTextField1, null);
this.getContentPane().add(jTextField2, null);
this.getContentPane().add(jTextField3, null);
this.getContentPane().add(jTextField4, null);
this.getContentPane().add(jTextField5, null);
this.getContentPane().add(jButton1, null);
}
public void actionPerformed(ActionEvent e)
{ //重新初始化
marble.marbleInit(Integer.parseInt(jTextField1.getText()),
Integer.parseInt(jTextField2.getText()),
Integer.parseInt(jTextField3.getText()),
Double.parseDouble(jTextField4.getText()),
Double.parseDouble(jTextField5.getText()));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -