小弟自己做了一个画图程序,在做橡皮擦工具时实现功能了,
但橡皮擦依然是鼠标,求各位高手如何将鼠标转换为橡皮形状??
以下是代码:
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();
}
}
}
但橡皮擦依然是鼠标,求各位高手如何将鼠标转换为橡皮形状??
以下是代码:
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();
}
}
}
解决方案 »
- synchronized能不能被继承呢
- Java中为什么会有这种写法
- Toolkit的方法createImage(String filename)参数filename到底如何设置
- 关于setVisible的疑问
- 内部类做监听器的问题<anonymous myframe$1> is not abstract and does not override abstract method actionPerformed
- 我解不了的疑惑
- 救助算法
- 哪位朋友有Optimize 5.5 IT的使用指南或资料?
- 如何知道中文乱码的内容
- 谁能帮着写个算法?
- 用while(true)这样死循环的算法会不会大量消耗系统资源?
- 请问JNI中,c++函数的参数是一个结构体,java对应的传递类是否同步更新的问题
我的建议是先找到类似的图片比如说rubber.jpgToolkit tk = Toolkit.getDefaultToolKit();
Image img = tk.getImage("rubber.jpg");
Cursor rubberCursor = tk.createCustomCorsor(img,new Point(10,10),"");应该是Toolkit里的方法,构造方法有点记不清了,LZ只有加入适当的监听就行了
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;
自己顶一下!