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

📄 bouncepress.java

📁 《Java核心技术应用开发》电子工业出版社书籍源代码
💻 JAVA
字号:
package sample;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;

public class BouncePress{
  public static void main(String[] args){
    JFrame frame = new BounceFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.show();
  }
}

class BounceFrame extends JFrame{
  public BounceFrame(){
    setSize(600,500);
    setTitle("Bounce Ball");
    Container contentPane = getContentPane();
    canvas = new BallCanvas();
    contentPane.add(canvas,BorderLayout.CENTER);
    JPanel buttonPanel = new JPanel();
    addButton(buttonPanel,"Start",
              new ActionListener(){
                public void actionPerformed(ActionEvent evt){
                  addBall(Thread.NORM_PRIORITY - 4,Color.black);
                }
              });
    addButton(buttonPanel,"Express",
              new ActionListener(){
                public void actionPerformed(ActionEvent evt){
                  addBall(Thread.NORM_PRIORITY + 2 ,Color.red);
                }
              });

    addButton(buttonPanel,"Close",
              new ActionListener(){
                public void actionPerformed(ActionEvent evt){
                  System.exit(0);
                }
              });
    contentPane.add(buttonPanel,BorderLayout.SOUTH);
  }

  public void addButton(Container c,String title,ActionListener listener){
    JButton button = new JButton(title);
    c.add(button);
    button.addActionListener(listener);
  }

  public void addBall(int priority,Color color){
    Ball b = new Ball(canvas,color);
    canvas.add(b);
    BallThread thread = new BallThread(b);
    thread.setPriority(priority);
    thread.start();
  }
  /*public void addBall(){
    try{
      Ball b = new Ball(canvas);
      canvas.add(b);

      for(int i = 1; i <= 1000; i++){
        b.move();
        Thread.sleep(5);
      }
    }
    catch (InterruptedException e) {}
  }*/

  private BallCanvas canvas;
}

class BallThread extends Thread{
  public BallThread(Ball aBall) { b = aBall; }

  public void run(){
    try{
      for(int i = 1; i <= 1000; i++){
        b.move();
        sleep(5);
      }
    }
    catch (InterruptedException e) {}
  }
  private Ball b;
}
class BallCanvas extends JPanel{
  public void add(Ball b){
    balls.add(b);
  }

  public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g;
    for(int i = 0;i < balls.size(); i++){
      Ball b = (Ball)balls.get(i);
      b.draw(g2);
    }
  }
  private ArrayList balls = new ArrayList();
}

class Ball{
  public Ball(Component c,Color aColor) { canvas = c; color = aColor; }

  public void draw(Graphics2D g2){
    g2.setColor(color);
    g2.fill(new Ellipse2D.Double(x,y,15,15));
  }

  public void move(){
    x += dx;
    y += dy;
    if (x < 0){
      x = 0;
      dx = -dx;
    }
    if (x + 15 >= canvas.getWidth()){
      x = canvas.getWidth() - 15;
      dx = -dx;
    }
    if (y < 0){
      y = 0;
      dy = -dy;
    }
    if (y + 15 >= canvas.getHeight()){
      y = canvas.getHeight() - 15;
      dy = -dy;
    }
    canvas.paint(canvas.getGraphics());
  }

  private Component canvas;
  private Color color;
  private int x = 0;
  private int y = 0;
  private int dx = 2;
  private int dy = 2;
}

⌨️ 快捷键说明

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