这是我的程序:
Paint.javaimport java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.Vector;
import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;public class Paint extends JPanel implements MouseListener,MouseMotionListener{
Vector v = new Vector();
Vector vec = new Vector();
private Graphics g;
//Robot rb = null;public void paint(Graphics g) {//画笔,这部分应该没错
    int[] x, y;
    for (int j = 0; j < vec.size(); j++) {
    x = new int[((Vector) vec.get(j)).size()];
    y = new int[((Vector) vec.get(j)).size()];
    for (int i = 0; i < ((Vector) vec.get(j)).size(); ++i) {
    Point p = (Point) ((Vector) vec.get(j)).get(i);
    x[i] = p.x;
    y[i] = p.y;
    }
    g.drawPolyline(x, y, ((Vector) vec.get(j)).size());
    }
}public Paint() {
vec.add(v);
addMouseMotionListener(this);
addMouseListener(this);}
void  boundaryFill4  (int x, int y, Color fillColor)//递归算法
{
        Color interiorColor=Color.black;//当前坐标颜色
interiorColor=getpixel(x, y);
if (
             interiorColor != fillColor){
 setPixel (x,y); // set color of pixel to fillcolor.
 boundaryFill4 (x+1, y, fillColor);
 boundaryFill4 (x-1, y,  fillColor);  boundaryFill4 (x, y+1, fillColor);
 boundaryFill4 (x, y-1,  fillColor);
   }
   }
Color getpixel(int x,int y){//获得当前坐标颜色信息
  
    Robot rb = null;
        try {
            rb = new Robot();
        } catch (AWTException ex) {
            Logger.getLogger(Paint.class.getName()).log(Level.SEVERE, null, ex);
        }
   
    return rb.getPixelColor(x, y);
}
void setPixel(int x,int y){//在当前坐标画一个黑点
    g=getGraphics();
    System.out.print("1111111");
    g.drawLine(x, y, x, y);
}
    public static void main(String[] args){
    Paint pa = new Paint();
    JFrame jf = new JFrame();
    jf.setLayout(new BorderLayout());
    jf.add(new Paint(),BorderLayout.CENTER);
    jf.setTitle("Paint");
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setSize(500,500);
    jf.setVisible(true);
}    public void mouseClicked(MouseEvent e) {
        if(e.getButton()==1){
           
         boundaryFill4(e.getX(),e.getY(),Color.black);
            }
        
    }    public void mousePressed(MouseEvent e) {
        
    }    public void mouseReleased(MouseEvent e) {
        v = new Vector();
        vec.add(v);
       
    }    public void mouseEntered(MouseEvent e) {
        
    }    public void mouseExited(MouseEvent e) {
      
    }    public void mouseDragged(MouseEvent e) {
        
        Point p = e.getPoint();
        v.add(p);
        repaint();
      
    }    public void mouseMoved(MouseEvent e) {
      
    }

我对GUI不熟悉,在获得当前坐标颜色和在当前坐标画一个点的方法上有错误,请各位大大帮忙看下!!!
我的意思就是画一个封闭的空间,然后在空间里点一点就可以给空间填色。
我的想法是在封闭的空间内点击鼠标,获得当前坐标颜色,判断它是否为黑色,如果不是就用递归算法进行填色

解决方案 »

  1.   

    四向连通递归填充算法:
      void BoundaryFill4(int x, int y, long FilledColor, long BoundaryColor)
      {
        long CurrentColor;
        CurrentColor = GetPixelColor(x,y);
        if (CurrentColor != BoundaryColor && CurrentColor != FilledColor)
        {
         SetColor(FilledColor);
         SetPixel (x,y);
         BoundaryFill4(x+1, y, FilledColor, BoundaryColor);
         BoundaryFill4(x-1, y, FilledColor, BoundaryColor);
         BoundaryFill4(x, y+1, FilledColor, BoundaryColor);
         BoundaryFill4(x, y-1, FilledColor, BoundaryColor);
        }
      }
        该算法的优点是非常简单,缺点是需要大量栈空间来存储相邻的点。