java如何实现填充算法,谢谢啦~
这是我的程序:
Paint.java
import 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不熟悉,在获得当前坐标颜色和在当前坐标画一个点的方法上有错误,请各位大大帮忙看下!!!
我的意思就是画一个封闭的空间,然后在空间里点一点就可以给空间填色。
我的想法是在封闭的空间内点击鼠标,获得当前坐标颜色,判断它是否为黑色,如果不是就用递归算法进行填色。。。