求助!java 画一个矩形,怎么样让这个白颜色的矩形跟随鼠标移动呢?(背景是非白色)

这是我用的笨方法,监听鼠标移动并重绘新的图形并覆盖旧图形颜色。另一种方法怎么弄?packageauther.abbott;importjava.awt.BorderLay... 这是我用的笨方法,监听鼠标移动并重绘新的图形并覆盖旧图形颜色。
另一种方法怎么弄?
package auther.abbott;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Rectangle2D;

import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Game extends JFrame {
/**
*
*/
private static final long serialVersionUID = -7926796655555593301L;
Container con;
Shape rec;
DrawPanel drawP;
int x=0,y=0;
int ox=0,oy=0;
Boolean flag=false;
Game(String title){
super(title);
this.setBounds(500, 300, 240, 320);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
con = this.getContentPane();
drawP = new DrawPanel();
Icon icon;
Cursor cursor = new Cursor(icon.paintIcon(this,, 30, 30));
this.setCursor(cursor);
this.setBackground(Color.pink);
con.add(drawP,BorderLayout.CENTER);
drawP.addMouseMotionListener(new MouseMotionListener(){
@Override
public void mouseDragged(MouseEvent arg0) {
// TODO 自动生成的方法存根

}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO 自动生成的方法存根
if(flag==true){
ox=x;
oy=y;
}
x=arg0.getX();
y=arg0.getY();
drawP.repaint();
}
});
}
class DrawPanel extends JPanel{
/**
*
*/
private static final long serialVersionUID = 6821779692499741237L;

public void paint(Graphics g){
Graphics2D g2 = (Graphics2D)g;
g2.setColor(Color.white);
rec = new Rectangle2D.Double(x, y, 50, 50);
g2.fill(rec);
if(flag==true){
g2.setColor(Color.pink);
g2.fill(new Rectangle2D.Double(ox, oy, 50, 50));
}
flag=true;
g2.setColor(Color.white);
g2.fill(rec);
}
}
}
展开
 我来答
优质内容提供者andy
2016-05-09 · TA获得超过1561个赞
知道大有可为答主
回答量:2551
采纳率:72%
帮助的人:763万
展开全部
我做过类似坦克大战的应用,重绘还有另一种写法就是页面隔一段时间刷新的方法。
追问

你好,打砖块那个游戏下面的那个反射板怎么设计??

这里我画一个矩形(代替那个打砖块反射板),可是怎么消除矩形之前移动的痕迹呢?

我用的是 鼠标移动事件,只要鼠标进入面板一移动,这个板子(矩形)就跟着移动。

你能告诉我主要怎么消除之前的痕迹呢?

追答
好像不是这么设计的你在主UI界面里面做一个线程 每隔一段时间刷新。把这个板定义成一个对象,利用对象的坐标和长宽来定义这个对象然后及时重新绘制。当时我做坦克大战的时候在主UI上面开了一个线程每隔一段时间重新绘制。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式