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

📄 example7_5_1.java

📁 书中的例题
💻 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 + -