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

📄 ballpanel.java

📁 自己写的一些桌球程序
💻 JAVA
字号:
package day03.table_ball;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;


/**
 * 显示小球的面板
 * @author Administrator
 *
 */
public class BallPanel extends JPanel{
	private double suDuX=0.0;
	private double suDuY=0.0;
	
	private Image image;
	
	private SuDuRun suDuRun;
	private int mouseX=0;
	private int mouseY=0;
	private int time;
	private boolean isClicking=false;
//	private JLabel labShow;
	//用一个ArrayList来保存所有的小球
	public static ArrayList balls = new ArrayList();
	   
	public BallPanel() {
		super();
//		prepareImage(createImage(new ImageProducer()),800,440,this.get);
		try {
			image=ImageIO.read(new File("day03\\table_ball\\table.png"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		setSize(800, 440);
		setBorder(new LineBorder(Color.red));
		addMouseListener();
//		labShow=new JLabel(time+"");
//		add(labShow,BorderLayout.EAST);
	}
	
	public void addBall(Ball b){
		balls.add(b);
	}
	public ArrayList getBalls() {
		return balls;
	}

	/**
	 * 重写父类的paintComponent方法,绘出所有小球。
	 */
	/**
	 * 给鼠标添加事件监听
	 *
	 */
	public void addMouseListener(){
		addMouseListener(new MouseAdapter(){

			public void mousePressed(MouseEvent e) {
				// TODO 鼠标按下移动时也要重画求杠
				if(e.getButton()==MouseEvent.BUTTON1){
System.out.println("Down----------------------------------------------------");
					mouseX=e.getX();
					mouseY=e.getY();
					suDuRun=new SuDuRun();
					suDuRun.start();
				}
			}
			public void mouseReleased(MouseEvent e) {
				// TODO 鼠标释放
				if(e.getButton()==MouseEvent.BUTTON1){
System.out.println("Up--------------------------------------------------------");
				suDuX=0;
				suDuY=0;
				
				double baiX=((Ball)balls.get(0)).getXx();
				double baiY=((Ball)balls.get(0)).getYy();
				suDuRun.stop();
				suDuRun=null;
				mouseX=e.getX();
				mouseY=e.getY();
				
System.out.println("mouseX    "+mouseX);
System.out.println("mouseY    "+mouseY);
				double xieDu=0.0;
				if(Math.abs(mouseX-baiX)==0
					||Math.abs(mouseY-baiY)==0){
					xieDu=0;
				}else{
					xieDu=(Math.abs(mouseX-baiX))
					/(Math.abs(mouseY-baiY));
				}
System.out.println("Time   "+time);
System.out.println("XieDu   "+xieDu);
				suDuX=(time%100)*Math.cos(Math.atan(Math.abs(baiY-mouseY)/Math.abs(baiX-mouseX)));
				suDuY=(time%100)*Math.cos(Math.atan(Math.abs(baiX-mouseX)/Math.abs(baiY-mouseY)));
System.out.println("suDuX    "+suDuX);
System.out.println("suDuY    "+suDuY);
				if(baiX>mouseX&&baiY>mouseY){
System.out.println("-------------------------------1---------------------------");
					((Ball)balls.get(0)).setDx(-suDuX);
					((Ball)balls.get(0)).setDy(-suDuY);
				}
				if(baiX>mouseX&&baiY<mouseY){
System.out.println("-------------------------------2---------------------------");
					((Ball)balls.get(0)).setDx(-suDuX);
					((Ball)balls.get(0)).setDy(suDuY);
				}
				if(baiX<mouseX&&baiY>mouseY){
System.out.println("-------------------------------3---------------------------");
					((Ball)balls.get(0)).setDx(suDuX);
					((Ball)balls.get(0)).setDy(-suDuY);
				}
				if(baiX<mouseX&&baiY<mouseY){
System.out.println("-------------------------------4---------------------------");
					((Ball)balls.get(0)).setDx(suDuX);
					((Ball)balls.get(0)).setDy(suDuY);
				}
				if(baiX==mouseX){
					if(baiY>mouseY){
System.out.println("--------------------------------5--------------------------");
						((Ball)balls.get(0)).setDy(-suDuY);
					}else{
System.out.println("--------------------------------6--------------------------");						
						((Ball)balls.get(0)).setDy(suDuY);
					}
				}
				if(baiY==mouseY){
					if(baiX>mouseX){
System.out.println("--------------------------------5--------------------------");
						((Ball)balls.get(0)).setDx(-suDuX);
					}else{
System.out.println("--------------------------------6--------------------------");						
						((Ball)balls.get(0)).setDx(suDuX);
					}
				}
				time=0;
				}
				if(balls.size()==1){
					JOptionPane op=new JOptionPane();
					op.showConfirmDialog(BallPanel.this, "全进拉");
				}
			}
		});
		addMouseMotionListener(new MouseMotionListener(){
			public void mouseDragged(MouseEvent e) {
				// TODO Auto-generated method stub
				mouseX=e.getX();
				mouseY=e.getY();
				BallPanel.this.repaint();
			}
			public void mouseMoved(MouseEvent e) {
//				if(isClicking){
					mouseX=e.getX();
					mouseY=e.getY();
//System.out.println("mouseX    "+mouseX);
//System.out.println("mouseY    "+mouseY);
					BallPanel.this.repaint();
//				}
				
			}
		});
	}
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		g.drawImage(image,0,0,null);
		Graphics2D g2 = (Graphics2D)g;
		g2.setColor(Color.BLACK);
//		g2.fill(new Ellipse2D.Double(15,25,25,25));	//左上
//		g2.fill(new Ellipse2D.Double(15,this.getHeight()-50,25,25));	//左下
//		g2.fill(new Ellipse2D.Double(this.getWidth()/2-12,20,25,25));	//中上
//		g2.fill(new Ellipse2D.Double(this.getWidth()/2-12,this.getHeight()-45,25,25));	//中下
//		g2.fill(new Ellipse2D.Double(this.getWidth()-45,25,25,25));	//右上
//		g2.fill(new Ellipse2D.Double(this.getWidth()-45,this.getHeight()-50,25,25));	//右下
		
		if(balls.size()>0){
			g2.drawLine(mouseX, mouseY,(int)((Ball)balls.get(0)).getXx(),
				(int)((Ball)balls.get(0)).getYy());
		}
//		g2.setColor(Color.red);
//		g2.drawLine(20,50,20,this.getHeight()-50);
//		g2.drawLine(this.getWidth()-20,50,this.getWidth()-20,this.getHeight()-50);
//		g2.drawLine(40,30,this.getWidth()/2-15,30);
//		g2.drawLine(this.getWidth()/2+15,30,this.getWidth()-45,30);
//		g2.drawLine(40,this.getHeight()-30,this.getWidth()/2-15,this.getHeight()-30);
//		g2.drawLine(this.getWidth()/2+15,this.getHeight()-30,this.getWidth()-45,this.getHeight()-30);
		for (int i = 0; i < balls.size(); i++){
			Ball b = (Ball)balls.get(i);
			b.draw(g2);
		}     
	}
	
	class SuDuRun extends Thread{
		@Override
		public void run() {
			time=0;
			while(true){
				time++;
				BallFrame.labShow.setText(time%100+"");
//				BallPanel.this.repaint();
				try {
					sleep(50);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				BallPanel.this.repaint();
			}

		}
	}
}

⌨️ 快捷键说明

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