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