JAVA鼠标拖动物体移动、碰撞销毁
主要也是利用了图形化用户界面一章,主要的功能、意图不是做界面,而是鼠标拖动物体到一定的范围之后就消失。
图中有1~6张不同颜色的标签,每次启动之后他们的位置是随机的,把他们拖拽到下面最大的总标签里面之后,对应的数字标签销毁并消失。
主要还是看下面的代码和运行效果图吧!相信大家都能看懂,也比较简单。
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;
/*
* 模块
* 鼠标拖动、销毁
* */
public class Rubbish extends JFrame {
JPanel jp;
JLabel[] jl = new JLabel[6];
JLabel jl_zon;
Color[] colors = {Color.BLACK,Color.CYAN,Color.GRAY,Color.RED,Color.YELLOW,Color.WHITE};
List<JLabel> list = new ArrayList<>();
int x,y;
public static void main(String[] args) {
new Rubbish();
}
public Rubbish(){
jp = new JPanel();
jp.setLayout(null);
this.add(jp);
for (int i=0;i<jl.length;i++){
jl[i] = new JLabel(""+(i+1),JLabel.CENTER);
jl[i].setBounds((int) (Math.random()*400),(int)(Math.random()*250) ,60,80);
jl[i].setBackground(colors[i]);
jl[i].setOpaque(true);
// System.out.println((int) (Math.random()*400)+" "+(int) (Math.random()*250));
jp.add(jl[i]);
list.add(jl[i]);
}
for(int i = 0 ; i < list.size();i++) {
JLabel jl= list.get(i);
list.get(i).addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
// System.out.println(x+" "+y);
}
public void mouseReleased(MouseEvent e) {
peng(jl,jl.getX(),jl.getY());
}
});
// 跟踪鼠标移动和鼠标拖动
list.get(i).addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
JLabel jl = (JLabel) e.getSource();
jl.setLocation(jl.getX()+e.getX()-x,jl.getY()+e.getY()-y);
// System.out.println(x+" "+y);
System.out.println(jl.getX()+" "+jl.getY());
// System.out.println(e.getX()+" "+e.getY());
}
});
}
jl_zon = new JLabel("总标签",JLabel.CENTER);
jl_zon.setBounds(150,350,200,100);
jl_zon.setBackground(Color.GREEN);
jl_zon.setOpaque(true);
jp.add(jl_zon);
this.setBounds(400,200,500,500);
this.setVisible(true);
}
public void peng(JLabel jlabel,int x,int y){
if(x>150 && x<350 && y>350 && y<450){
jp.remove(jlabel);
jp.repaint();
}
}
}
运行效果如下:
如有不懂,加微信 :zhi19990327
备注 :Java碰撞、消失