1+ import java .awt .Color ;
2+ import java .awt .Graphics ;
3+ import java .awt .event .KeyEvent ;
4+ import java .awt .event .KeyListener ;
5+
6+ import javax .swing .JFrame ;
7+
8+ public class FloodFill extends JFrame {
9+ private int myPixel = 25 ;
10+ private int loops = 1 ;
11+
12+ public FloodFill () {
13+ KeyListener listener = new MyKeyListener ();
14+ addKeyListener (listener );
15+ setFocusable (true );
16+ }
17+
18+
19+ private void drawGrid (Graphics g ){
20+ g .setColor (Color .white );
21+ for (int i =0 ; i < 500 ; i +=myPixel ){
22+ g .drawLine (0 , i , 500 , i );
23+ g .drawLine (i , 0 , i , 500 );
24+ }
25+ }
26+
27+ private Color [][] fill (int x , int y , int loops ){
28+ Color [][] toFill = new Color [20 ][20 ];
29+ toFill = floodFill (x , y , toFill , loops );
30+
31+ return toFill ;
32+ }
33+
34+ private Color [][] floodFill (int x , int y , Color [][] toFill , int loops ){
35+ if (loops <= 0 ){
36+ return toFill ;
37+ }
38+ if (x < 3 || x >= 17 || y < 3 || y >= 17 ){
39+ return toFill ;
40+ }
41+ if (toFill [x ][y ] != null && (!toFill [x ][y ].equals (Color .red ))){
42+ return toFill ;
43+ }
44+ else {
45+ toFill [x ][y ] = Color .red ;
46+ toFill = floodFill (x +1 , y , toFill , loops -1 );
47+ toFill = floodFill (x , y +1 , toFill , loops -1 );
48+ toFill = floodFill (x -1 , y , toFill , loops -1 );
49+ toFill = floodFill (x , y -1 , toFill , loops -1 );
50+ }
51+ return toFill ;
52+ }
53+
54+ private void drawFill (Graphics g , Color [][] toFill ){
55+ for (int i =0 ; i < toFill .length ; i ++){
56+ for (int j =0 ; j < toFill [i ].length ; j ++){
57+ g .setColor (toFill [i ][j ]);
58+ g .fillRect (i *myPixel , j *myPixel , myPixel , myPixel );
59+ g .setColor (Color .black );
60+ }
61+ }
62+ }
63+
64+ public void paint (Graphics g ){
65+ Color [][] toFill = fill (10 ,10 ,loops );
66+ drawFill (g , toFill );
67+ drawGrid (g );
68+ repaint ();
69+ }
70+
71+ public static void main (String [] args ){
72+ FloodFill frame = new FloodFill ();
73+ frame .setTitle ("Flood Fill" );
74+ frame .setSize (500 ,500 );
75+ frame .setVisible (true );
76+ frame .setDefaultCloseOperation (JFrame .EXIT_ON_CLOSE );
77+ }
78+ public class MyKeyListener implements KeyListener {
79+ @ Override
80+ public void keyPressed (KeyEvent arg0 ) {
81+ }
82+
83+ @ Override
84+ public void keyReleased (KeyEvent arg0 ) {
85+ if (arg0 .getKeyCode () == 39 ){
86+ loops ++;
87+ }
88+ if (arg0 .getKeyCode () == 37 ){
89+ loops --;
90+ }
91+ System .out .println (loops );
92+ }
93+
94+ @ Override
95+ public void keyTyped (KeyEvent arg0 ) {
96+ // TODO Auto-generated method stub
97+
98+ }
99+ }
100+ }
0 commit comments