Hola:
1. Echa un ojo a la API de JButton y clases padre. Los métodos setMargin() y setBorder() seguramente te permitan quitar ese espacio.
2. Por supuesto no es necesario ir con todas las áreas una a una, basta con algo de matemáticas. Haz un bucle de filas y otro dentro de columnas. Con eso y alguna formulilla puedes calcular el resto de cosas. Te pongo una aproximación, aunque tendrás que revisar y ajustar
Código java:
Ver originalfor (int fila=0;i<3;i++){
for (int columna=0;i<3;i++) {
int bordeIzquierdoX = fila * 100 + 5; // da 5, 105, 205, ...
int bordeDerechoX = fila * 100 + 95; // da 95, 195, 295, ...
int bordeSuperiorY = columna * 100 + 5; // da 5, 105, 205, ...
int bordeInferiorY = columna + 100 + 95; // da 95, 195, 295, ..
int indiceImagen = fila*3+columna; // da 0, 1, 2, 3, ....
// Aquí el código que tienes dentro de cualquiera de los if, reemplazando los valores fijos
// por la variable adecuada.
}
}
3. No te puedo aconsejar, nunca he leído un libro de java entero.
Se bueno.