Hola:
El problema de hacerlo por fuerza bruta es que habrá veces que el Sudoku que ha empezado a generar no tenga solución y se quede pillado. Yo ahora mismo estoy haciendo un Sudoku también en java, así que igual te puedo dar algunas pistas que te pueden resultar útiles.
En mi caso he optado por generar todo el Sudoku para luego descartar números. Para ello he preferido ir rellenando los números de la tabla seguidos con posiciones aleatorias, es decir, empezamos con el 1 en el primer 3x3 en una de las nueve posiciones posibles y seguimos con el siguiente. Así con los demás 3x3 hasta que lleguemos al último. Luego pasamos al siguiente número y hacemos lo mismo. Por supuesto este método ha de tener en cuenta las reglas del sudoku a la hora de revisar los números que hay en el panel, aunque de momento podemos ignorar la comprobación de 3x3, pues el número que estamos introduciendo en la tabla de 3x3 no va a estar nunca repetido. También es útil que el método tenga alguna forma de saber qué posiciones de las 9 posibles ha probado, más que nada para evitar el usar demasiados ciclos de procesador (y más en mi caso, que el Sudoku que estoy desarrollando es para móviles).
Como digo según se va generando la tabla es posible que llegue un punto en el que no pueda seguir poniendo más números, pues el Sudoku que está generando a partir de X momento puede no tener solución. Para ello en el mío cree una matriz de 4 X 81, en la cual se registran los sudokus de manera temporal cuando se han terminado de introducir los 3, 5, 7 y 8, de esa forma podemos volver atrás cuando el Sudoku se quede pillado y no tener que empezar a generarlo de nuevo con todo lo que ello conllevaría (aunque en algún caso no quedará más remedio).
Bueno, y una vez el Sudoku está generado toca seleccionar los números que van a aparecer en pantalla. En mi caso lo que hice fue sumarle 10 a 3 números de cada 3x3, y luego mediante un número aleatorio sumar 10 a otros 2~4 más. Luego cuando los vaya a dibujar en pantalla los números entre el 1 y el 9 los ignoras y sólo dibujas los comprendidos entre el 11 y al 19 (saldrán en naranja), que deberían ser unos 29~31 números en mi caso; creo que son suficientes para poder resolverlo. Luego por ejemplo puedes hacer que los números que meta el usuario sean introducidos como números del 21 al 29 y salgan en pantalla de un color distinto a los otros, de esa forma además puedes hacer que el método que comprueba si el número que quieres introducir es correcto no te deje sobrescribir los números que la máquina puso inicialmente, pudiendo sólo escribir encima de los números comprendidos del 1 al 9 (que serán interpretados como 0) o del 21 al 29.
Te pongo una captura de todo esto que te comento:
Sí, es un Sudoku con los colores de EOL
De momento no me he metido demasiado con la parte gráfica
Un saludo y nada, espero que te resulte de ayuda.