小弟自己做了一个画图程序,在做橡皮擦工具时实现功能了,
但橡皮擦依然是鼠标,求各位高手如何将鼠标转换为橡皮形状??
以下是代码:
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Cursor;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;public class DrP{
public static void main(String args[]){
new DrawPicture("画图");
}
} class Point{
int x, y,tool;
Point(int x, int y, int tool){
this.x = x;
this.y = y;
this.tool = tool;
}
Point(int x, int y){
this.x = x;
this.y = y;
}

}class DrawPicture extends Frame implements ActionListener{
Point p3 ,p4 ;
List<Point> points;
Button drLine,drOval,drRect,drClear,eraser;
Panel p = new Panel();
Boolean flag = false;
int toolFlag = 1;
int Econ = 5;
Toolkit tk;
Image img = tk.getImage(DrawPicture.class.getClassLoader().getResource("1.jpg"));

DrawPicture(String s){
super(s);

points = new ArrayList<Point>();
drLine = new Button("直线");
drOval = new Button("椭圆");
drRect = new Button("矩形");
eraser = new Button("橡皮");
drClear = new Button("清屏");
drLine.addActionListener(this);
drOval.addActionListener(this);
drRect.addActionListener(this);
drClear.addActionListener(this);
eraser.addActionListener(this);
p.add(drLine);
p.add(drOval);
p.add(drRect);
p.add(eraser);
p.add(drClear);

add(p, BorderLayout.NORTH);
setBounds(200,200,600,500);
addMouseListener(new HandlePaint());
addMouseMotionListener(new HandlePaint());
setVisible(true);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});

}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == drLine){
toolFlag = 1;
}
if(e.getSource() == drOval){
toolFlag = 2;
}
if(e.getSource() == drRect){
toolFlag = 3;
}
if(e.getSource() == eraser){
toolFlag = 4;
}
if(e.getSource() == drClear){
points.clear();
repaint();
}
}

public void paint(Graphics g){

for(int i=0; i<points.size(); i+=2){
Point p1, p2;
p1 = points.get(i);
p2 = points.get(i+1);
if(p1.tool == p2.tool){
switch(p1.tool){
case 1:
g.drawLine(p1.x,p1.y, p2.x,p2.y);
break;
case 2: 
g.drawOval(p1.x,p1.y, Math.abs(p2.x-p1.x),Math.abs(p2.y-p1.y));
break;
case 3: 
g.drawRect(p1.x,p1.y, Math.abs(p2.x-p1.x),Math.abs(p2.y-p1.y));
break;
case 4: 
g.clearRect(p1.x,p1.y,Econ,Econ);
break;
default:
return;
}
}
}
if(true == flag){
switch(toolFlag){
case 1:
g.drawLine(p4.x,p4.y, p3.x,p3.y);
break;
case 2:
g.drawOval(p4.x,p4.y, Math.abs(p4.x - p3.x), Math.abs(p4.y - p3.y));
break;
case 3:
g.drawRect(p4.x,p4.y,Math.abs(p4.x - p3.x), Math.abs(p4.y - p3.y));
break; default:
return;
}
}
}

public void update(Graphics g) {
Image offImage = this.createImage(600, 500);
Graphics imageGraphics = offImage.getGraphics();
paint(imageGraphics);
imageGraphics.dispose();
g.drawImage(offImage, 0, 0, null);
} private class HandlePaint extends MouseAdapter{
public void mouseDragged(MouseEvent e){
flag = true;
switch(toolFlag){
case 1:
p3 = new Point(e.getX(),e.getY(),toolFlag);
repaint();
break;
case 2:
p3 = new Point(e.getX(),e.getY(),toolFlag);
repaint();
break;
case 3:
p3 = new Point(e.getX(),e.getY(),toolFlag);
repaint();
break;
case 4:
Cursor dynamiteCursor = tk.createCustomCursor(img, new Point(0, 0), "1.jpg");
p3 = new Point(e.getX(),e.getY(),toolFlag);
points.add(p3);
points.add(p3);
repaint();
break;
default:
return;
}
}

public void mousePressed(MouseEvent e){
switch(toolFlag){
case 1:
p4 = new Point(e.getX(),e.getY(),toolFlag);
break;
case 2:
p4 = new Point(e.getX(),e.getY(),toolFlag);
break;
case 3:
p4 = new Point(e.getX(),e.getY(),toolFlag);
break;
default:
return;
}
}

public void mouseReleased(MouseEvent e){
Point p2 = null;
flag = false;
switch(toolFlag){
case 1:
p2 = new Point(e.getX(),e.getY(),toolFlag);
repaint();
break;
case 2:
p2 = new Point(e.getX(),e.getY(),toolFlag);
repaint();
break;
case 3:
p2 = new Point(e.getX(),e.getY(),toolFlag);
repaint();
break;
default:
return;
}
points.add(p4);
points.add(p2);
repaint();
}
}
}

解决方案 »

  1.   

    橡皮鼠标是鼠标的自定义类型
    我的建议是先找到类似的图片比如说rubber.jpgToolkit tk = Toolkit.getDefaultToolKit();
    Image img = tk.getImage("rubber.jpg");
    Cursor rubberCursor = tk.createCustomCorsor(img,new Point(10,10),"");应该是Toolkit里的方法,构造方法有点记不清了,LZ只有加入适当的监听就行了
      

  2.   

    case 4: 
    Cursor dynamiteCursor = tk.createCustomCursor(img, new Point(0, 0), "1.jpg"); //问题就在这个地方,大家帮帮忙!!!
    p3 = new Point(e.getX(),e.getY(),toolFlag); 
    points.add(p3); 
    points.add(p3); 
    repaint(); 
    break; 
    自己顶一下!